Posté le 13/10/2009 à 16:07 Membre depuis le 28/08/2003, 8205 messages
Salut,
Un petit jeu pour ceux qui aiment se remuer les méninges : écrire une fonction qui rend la valeur absolue d’un entier 32 bits sans utiliser aucun saut.
À vous de jouer !
avatar« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
Posté le 13/10/2009 à 16:14 Membre depuis le 10/06/2001, 45113 messages
(On a droit à une table ? trigni)
Posté le 13/10/2009 à 16:19 Membre depuis le 16/06/2001, 69781 messages

function abs(x) {
x = x * x
return sqrt(x)
}
Posté le 13/10/2009 à 16:21 Membre depuis le 16/06/2001, 69781 messages
sérieusement

Using assembly language, it is possible to take the absolute value of a register in just three instructions (example shown for a 32-bit register on an x86 architecture, Intel syntax):

http://www.google.fr/#hl=fr&q=%22absolute+value%22+algorithm&meta=&fp=1&cad=b

http://www.experiencefestival.com/a/Absolute_value_-_Algorithms/id/604651

cdq
xor eax, edx
sub eax, edx


(qu'est ce que c'est que ce site trifus)
Posté le 13/10/2009 à 16:30 Membre depuis le 18/06/2001, -26081 message
Pen^2 (./2) :
(On a droit à une table ? trigni)

Oui, de 4 gigas (cf le topic "enfin une extension mémoire réalisable rapidement" trioui)
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 13/10/2009 à 16:32 Membre depuis le 10/06/2001, 45113 messages
trilove
Posté le 13/10/2009 à 16:34 Membre depuis le 10/06/2001, 40269 messages
En 68k, ça donne:
long absl(long n asm("d0"));
absl:
tst.l %d0
slt.b %d1
ext.w %d1
ext.l %d1
eor.l %d1,%d0
sub.l %d1,%d0
rts
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 13/10/2009 à 16:34 Membre depuis le 16/06/2001, 69781 messages
merci pour la transcription hehe
Posté le 13/10/2009 à 19:50 Membre depuis le 27/04/2006, 60479 messages
[code] move.l d0, d1
rol.l #1, d1
and.l #1, d1
neg.l d1
eor.l d1, d0
sub.l d1, d0[/code]

Variation perso. Mais je sais pas si ça prend moins de cycles que la version de Kevin.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 13/10/2009 à 19:54 Membre depuis le 10/06/2001, 40269 messages
Ta version prend plus de place en tout cas!
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 13/10/2009 à 20:14 Membre depuis le 27/04/2006, 60479 messages
Oui, c'est vrai. On peut faire :

[code] moveq.l #1, d2
move.l d0, d1
rol.l d2, d1
and.l d2, d1
neg.l d1
eor.l d1, d0
sub.l d1, d0[/code]

mais ça prend 2 octets de plus que ta version.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 13/10/2009 à 20:36 Membre depuis le 28/08/2003, 8205 messages
Il est possible de faire tenir ça sur 10 octets wink (sans compter le rts, et en utilisant une autre démarche que celles que vous avez proposées)
Indice : utiliser le bit de retenue « x »
avatar« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
Posté le 13/10/2009 à 21:46 Membre depuis le 27/04/2006, 60479 messages
Bon, j'ai pas trouvé l'astuce avec le flag X, mais j'y arrive aussi en 10 octets :
move.l  d0, d1
moveq.l #31, d2
asr.l  d2, d1
eor.l  d1, d0
sub.l  d1, d0

(par contre, en nombre de cycles, ça risque de faire mal grin)
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 13/10/2009 à 22:34 Membre depuis le 28/08/2003, 8205 messages
Excellent !
La solution que j’ai (trouvée dans un papier de Henry Massalin) fait la même taille mais prend moins de cycles :
move.l  d0, d1
add.l   d1, d1
subx.l  d1, d1
eor.l   d1, d0
sub.l   d1, d0
avatar« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
Posté le 13/10/2009 à 22:54 Membre depuis le 27/04/2006, 60479 messages
Ah oui, pas bête le coup du add + subx smile
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 13/10/2009 à 23:00 Membre depuis le 10/06/2001, 20910 messages
C'est intelligent smile Mais en réalité on fait un test suivi d'un saut car c'est plus rapide et plus petit, non ?
avatarUn site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.
Posté le 13/10/2009 à 23:13 Membre depuis le 27/04/2006, 60479 messages
Sur 68000 ça vaudrait le coup de comparer les deux solutions, c'est pas sûr qu'on soit gagnant en effet.

Mais sur les processeurs plus évolués avec un long pipeline, vaut mieux en général éviter les sauts si on peut faire autrement : un saut peut faire perdre beaucoup de cycles, le temps que le pipeline soit rechargé.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 14/10/2009 à 09:37 Membre depuis le 18/06/2001, -26081 message
tst.l d0
bpl.s Positif
neg.l d0

Positif:

6 octets avec un saut
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 14/10/2009 à 09:54 Membre depuis le 10/06/2001, 40269 messages
Oui, mais c'est facile, ça. grin
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 14/10/2009 à 10:07 Membre depuis le 18/06/2001, -26081 message
Naturellement, ce n'était qu'un élément de comparaison hein. grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 14/10/2009 à 11:37 Membre depuis le 11/11/2001, 116496 messages
ça fait super longtemps que j'ai pas touché au 68000 donc j'ai un doute sur le format des entiers signés 32bits mais si c'est le msb qui sert pour stocker le signe, il suffit de le masquer, non ? (à moins que le valeurs négatives soient en complément à deux)
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca
Posté le 14/10/2009 à 11:39 Membre depuis le 16/06/2001, 69781 messages
oui, c'est le msb, et les valeurs négatives sont en complément à deux
Posté le 14/10/2009 à 11:55 Membre depuis le 10/06/2001, 45113 messages
vince > je te conseille Zguide embarrassed (il est toujours en ligne love http://membres.lycos.fr/zorglop/ti92/zguide/)
Posté le 14/10/2009 à 11:55 Membre depuis le 18/06/2001, -26081 message
nan eeek
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 14/10/2009 à 11:57 Membre depuis le 10/06/2001, 45113 messages
Si embarrassed
Posté le 14/10/2009 à 12:53 Membre depuis le 10/06/2001, 40269 messages
Je déconseille fortement le Zguide, c'est vraiment catastrophique. (Je me rappelle toujours quand j'ai essayé d'apprendre avec cette horreur il y a quelques années, c'était totalement impossible.)
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 14/10/2009 à 13:19 Membre depuis le 10/06/2001, 20910 messages
Ben j'ai appris avec, entre autres et comme d'autres (Pen2 ?). Il était bordélique mais c'etait le seul document en français avec la traduction d'un cours américain assez pointu. Les deux se complétaient.
avatarUn site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.
Posté le 14/10/2009 à 16:10 Membre depuis le 10/06/2001, 45113 messages
Oué, nous n'étions pas au courant que c'était impossible, alors nous avons appris avec quand même tongue
Zorglop n'y est pour rien si tu es mauvais embarrassed
Posté le 14/10/2009 à 16:15 Membre depuis le 10/06/2001, 20910 messages
Je cherchais une manière de le dire, puis j'ai laissé tomber grin
avatarUn site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.
Posté le 14/10/2009 à 16:18 Membre depuis le 10/06/2001, 45113 messages
'service tripo