1

Est ce que quelqu'un aurait une routine asm, pour calculer les cosinus,sinus et les inverses.

C'est iiiiiimmmmmmmmmppppppppppoooooorrrrrtttttttaaaannnnnnnntttttt!!!!!!!!!!!!!!!!!!

2

tu as essayé de faire des tables?
attends je te poste un generateur

si tu as besoin d'une fct, essaye d'en faire une approximation avec une eq du 2nd degré
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() {   float tfsin[360],tfcos[360];   int tisin[360],ticos[360];   char tcsin[360],tccos[360];   int facteur,type,i;   FILE *f=fopen("sintable.h","w");   printf("salut, vieux!ntape ton facteur de mulu:");   scanf("%d",&facteur);   printf("*ntape 1 pour des int,2 pour des float,3 pour des word:");   scanf("%d",&type);     switch(type)   {   case 1:     for(i=0;i<360;i++)       tisin[i]=facteur*sin(i*0.017453292519943);     for(i=0;i<360;i++)       ticos[i]=facteur*cos(i*0.017453292519943);      fprintf(f,"//header de tables de sin et cos en intnint tsin[360]={ ");     for(i=0;i<359;i++)           fprintf(f,"%d, ",tisin[i]);     fprintf(f,"%d };nint tcos[360]={ ",tisin[359]);      for(i=0;i<359;i++)           fprintf(f,"%d, ",ticos[i]);     fprintf(f,"%d };",ticos[359]);      fclose(f);    break;   default:     printf("tu t'es trompé vieux, t'aura des float vieux!");   case 2:     for(i=0;i<360;i++)       tfsin[i]=facteur*sin(i*0.017453292519943);     for(i=0;i<360;i++)       tfcos[i]=facteur*cos(i*0.017453292519943);       fprintf(f,"//header de tables de sin et cos en floatnfloat tsin[360]={ ");     for(i=0;i<359;i++)           fprintf(f,"%f, ",tfsin[i]);     fprintf(f,"%f };nfloat tcos[360]={ ",tfsin[359]);      for(i=0;i<359;i++)           fprintf(f,"%f, ",tfcos[i]);     fprintf(f,"%f };",tfcos[359]);      fclose(f);    break;   case 3:     for(i=0;i<360;i++)       tcsin[i]=facteur*sin(i*0.017453292519943);     for(i=0;i<360;i++)       tccos[i]=facteur*cos(i*0.017453292519943);      fprintf(f,"//header de tables de sin et cos en charnchar tsin[360]={ ");     for(i=0;i<359;i++)           fprintf(f,"%d, ",tcsin[i]);     fprintf(f,"%d };nchar tcos[360]={ ",tcsin[359]);       for(i=0;i<359;i++)           fprintf(f,"%d, ",tccos[i]);     fprintf(f,"%d };",tccos[359]);      fclose(f);       break;     }      printf("nmerci vieux, à plus vieux!n");   return 0; }
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

3

Regarde la source de FAT, il utilise une table des valeurs.
Aussi, la series (C'est le mot juste?) Taylor:
sin(x)=x-x^3/(3!)+x^5/(5!)-....+(-1)^r * x^(2*r+1) / (2*r+1)!
Voici un programme (du fichier http://www.ticalc.org/pub/text/68k/92guide.zip):

move.l #500,D0 ; 0.5->ang_input
bsr sine
bsr disp
rts

sine:
movem.l D2-D6,-(A7) ; saving to be destroyed regs
move.b #3,D4 ; initializing all variables
move.b #2,D5
move.l D0,D1

do:
bsr term_calculus
test_precision:
cmp.l #1,D2
bls end_do
end_test_precision:
if_1: ;
btst #0,D5 ;
beq else_1 ;
then_1: ; to test the parity of "range"
add.l D2,D1 ;
bra end_if_1 ;
else_1: ;
sub.l D2,D1 ;
end_if_1: ;
add.b #2,D4
add.b #1,D5
bra do
end_do:
movem.l (A7)+,D2-D6
rts ; end of the sine subroutine

term_calculus:
move.b D4,D6
sub.b #1,D6
ext.w D6
move.b D4,D3
ext.w D3
move.w D0,D2
loop:
mulu D0,D2
lsr.l #8,D2 ; we just replaced the divu and ext by
lsr.l #2,D2 ; these 2 lines
mulu D6,D3
sub.w #1,D6
tst.w D6
bne loop

ext.l D2 ; because divu needs the 2nd param to be a longword
divu D3,D2
ext.l D2
rts

EDIT:
cos(x) = sin (90 - x) ou cos(x) = sin (pi/4 - x)