1

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. »

2

(On a droit à une table ? trigni)

3


function abs(x) {
x = x * x
return sqrt(x)
}

4

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)

5

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)

6

trilove

7

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
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

8

9

[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.
avatar
Zeroblog

« 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

10

Ta version prend plus de place en tout cas!
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

11

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.
avatar
Zeroblog

« 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

12

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. »

13

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)
avatar
Zeroblog

« 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

14

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. »

15

Ah oui, pas bête le coup du add + subx smile
avatar
Zeroblog

« 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

16

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 ?
avatar
Un 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.

17

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é.
avatar
Zeroblog

« 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

18

tst.l d0
bpl.s Positif
neg.l d0

Positif:

6 octets avec un saut

19

Oui, mais c'est facile, ça. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

20

Naturellement, ce n'était qu'un élément de comparaison hein. grin

21

ç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)
avatar
Webmaster 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

22

oui, c'est le msb, et les valeurs négatives sont en complément à deux

23

vince > je te conseille Zguide embarrassed (il est toujours en ligne love http://membres.lycos.fr/zorglop/ti92/zguide/)

24

nan eeek

25

Si embarrassed

26

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.)
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

27

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.
avatar
Un 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.

28

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

29

Je cherchais une manière de le dire, puis j'ai laissé tomber grin
avatar
Un 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.

30

'service tripo