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. »
(On a droit à une table ? trigni)

function abs(x) {
x = x * x
return sqrt(x)
}
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)
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) !
trilove
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é
[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
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é
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
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. »
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
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. »
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
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.
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
tst.l d0
bpl.s Positif
neg.l d0

Positif:

6 octets avec un saut
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
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é
Naturellement, ce n'était qu'un élément de comparaison hein. grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
ç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
oui, c'est le msb, et les valeurs négatives sont en complément à deux
vince > je te conseille Zguide embarrassed (il est toujours en ligne love http://membres.lycos.fr/zorglop/ti92/zguide/)
nan eeek
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Si embarrassed
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é
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.
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
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.
'service tripo