1

Salutgrin, tout le monde!

bon, voilà mon pbl:
dans un prog, je dois utiliser des sinus et des cosinus... je comptais faire des tableaux de valeurs, avec le sinus correspondant à chaque angle (par tranche de 1°), et décaler la position de lecture dans le tableau pour les cosinus (vu que c la même fonction, mais décalée de pi/2)

la merde, c que les cosinus et les sinus, c des nombres à virgule du genre 0,1234 et que je vois pas du tout du tout comment foutre ça dans un tableau!
est-ce que je dois mettre comme valeur cos(x)*10000 (pour cos(x)=0,1234) et après, rediviser le tout par 10000 dans le programme, ou y a-t-il une autre méthode (certainement).

ah, oui, y a t il un équivalent de int(x) (ti-basic) qui permet d'obtenir la partie entière d'un nombre?confus
[edit]Edité par SbiBI le 22-06-2001 à 12:36:24[/edit]
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

2

Le meilleur moyen est de faire de la virgule fixe.
Tu stocke tes nombre dans un word, et tuconsidere l'octet de poid fort comme partie entiere (ou alors tu prend un dword, et le mot de poid fort pour partie entiere).

attentionFais gaffe a la virgule quand tu fais tes calculs ! (il y a des marco dans genlib.h, si tu veut)

Et pour recupere la partie entier, je crois que tu y arrivera tout seul wink

3

"ah, oui, y a t il un équivalent de int(x) (ti-basic) qui permet d'obtenir la partie entière d'un nombre ?"

Ben le processeur gère pas les virgules flottantes, donc la question n'a pas de sens.

A ta place, j'utiliserai une virgule fixe.
[edit]Edité par Renorems le 22-06-2001 à 12:55:13[/edit]
Crée par le Diable à son image.

4

ouais, c bien ce qui me semblait pour l'int... mais j'avais quand même un doute paske j'avais fait une routine d'affichage avec des coordonnées calculées à partir de fractions, et ça me foutait des address error à chaquefois, puis plantage... comme si ça allait écrire dans la mem après l'écran...

je v essayer ça merciwink
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

5

Tu peux voir l'implementation de genlib.
C un bon exemple (Non, j'ai pas dit de l'utiliser, j'ai dit de regarder les exemples wink)

6

j'ai fait une table de pas de 1° dans rv_lib, ma méthode ?
cos varie de -1 à 1
donc il varie pareil de 0 à 90° sur 0 à 360° à un signe près, ensuite j'ai calculé int(1024*cos(x)) et puis mis ça dans une table.w
ensuite quand tu récupère la valeur en d0.w, tu fais :
move.w #10,d1
lsr.w d1,d0
et tu as directement la bonne valeure entière dans d0
et si tu veux un plus grand cos, et bien tu multiplie d0 par 1 à 64 sur un mot seulement ou plus sur un long mot, et tu récupère la valeur entière du cos !

mon explication est-elle claire ?
cool
:D

7

attention à l'ordre quand même, car on multiplie avant de décaler mais bon c'était logique
:D

8

bon, je pense que g oas tout compris, mais g essayé, et ça marche po!

voici mon code:
|SINE dc.w 0
|COSINE dc.w 0
|X_BUFFER dc.w 0
|
|Find_Cos MACRO;§
| movem.w d0-d7,-(a7);save_registers
| move.w 1,d1;store angle_value in d0
| add.w d1,d1;§.w -> 2*(§).b
| move.w 0(a2,d1.w),d0
| move.w #10,d1
| lsr d1,d0
| move.w d0,COSINE;store cos(§) in COSINE addr.
| movem.w (a7)+,d0-d7;restore_registers
| ENDM
|Find_Sin MACRO;§
| movem.w d0-d7,-(a7);save_registers
| move.w 1,d1;store angle value in d0
| add.w d1,d1;§.w -> 2*(§).b
| move.w 0(a4,d1.w),d0
| move.w #10,d1
| lsr d1,d0
| move.w d0,SINE;store sin(§) in SINE addr.
| movem.w (a7)+,d0-d7;restore_registers
| ENDM
|
|_main:
| lea costable(pc),a2
| lea sintable(pc),a4
| move.w #30,d3;§=30°
| move.w #10,d0
| move.w #5,d2
| Find_Cos d3;COSINE=cos(§)
| Find_Sin d3;SINE=sin(§)
| move.w COSINE,d4;d4=cos(§)
| move.w SINE,d5 ;d5=sin(§)
| muls.w d0,d4;d4=X*cos(§)
| muls.w d2,d5;d5=Z*sin(§)
| sub.w d5,d4 ;d4=X*cos(§)-Z*sin(§)
| move.w d4,X_BUFFER;X_BUFFER=X*cos(§)-Z*sin(§)
| ...
| rts
|
|costable; int(1024*cos(§))
| dc.w 1024,1023,1023,1022,1021,1020,1018,1016,1014,1011
| dc.w 1008,1005,1001,997,993,989,984,979,973,968
| dc.w 962,955,949,942,935,928,920,912,904,895
| dc.w 886,877,868,858,848,838,828,817,806,795
| dc.w 784,772,760,748,736,724,711,698,685,671
| dc.w 658,644,630,616,601,587,572,557,542,527
| dc.w 512,496,480,464,448,432,416,400,383,366
| dc.w 350,333,316,299,282,265,247,230,212,195
| dc.w 177,160,142,124,107,89,71,53,35,17
| dc.w 0
|sintable; int(1024*sin(§))
| dc.w 0,17,35,53,71,89,107,124,142,160
| dc.w 177,195,212,230,247,265,282,299,316,333
| dc.w 350,366,383,400,416,432,448,464,480,496
| dc.w 512,527,542,557,572,587,601,616,630,644
| dc.w 658,671,685,698,711,724,736,748,760,772
| dc.w 784,795,806,817,828,838,848,858,868,877
| dc.w 886,895,904,912,920,928,935,942,949,955
| dc.w 962,968,973,979,984,979,993,997,1001,1005
| dc.w 1008,1011,1014,1016,1018,1020,1021,1022,1023,1023
| dc.w 1024


ben, voilà, et dans X_BUFFER, g des trucs bizzares...
je sais que les tableaux de sinus et de cosinus peuvent s'optimiser, mais ge voulais d'abord faire marcher l'algo, et là... marche pas

chais pas trop où on doit mettre le move.w #10,d1 lsr d1,d0 pour que ça marche...
[edit]Edité par SbiBI le 28-06-2001 à 17:33:31[/edit]
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

9

juste une question à propos des virgules flottantes : un proc est pas obligé de les gérer, la rom peut le faire à sa place non?
et en C y'a les virgules flottantes aussi alors je pige plus rien...

10

zut! j'y comprend rien! comment on doit faire!
au secours!
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

11

[Pollux]>comment ça and.w #255 ?
y deviendrait koi, alors, mon bout de code???
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina