Salut !!

J'optimise actuellement mon programme graphique (un "jeu" ou plutot test coding) en réécrivant toutes les fonctions mathématiques usuelles avec les optimisations possibles du processeur.

Ainsi, j'en suis a la 3DNow !. Je viens de terminer ma fonction exponentielle. Cependant, je n'obtiens pas une excellente précision
Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
float exp(int Power)
  {
   float Res;
 
   _asm{
	femms
 
	//initialisation des variables
	mov Res,0
	movq mm0, [fExp]
	mov eax,1 
 
	//debut de la boucle
calcexp:
	pfmul mm0,[fExp]
 
	inc eax
    cmp eax, Power
jne calcexp
 
	movq [Res], mm0
	femms
   }
 
   return Res;
  }
#define Exp1 2.71828182845f // e^1
....
float fExp = Exp1;
=> c'est un code C++ dans lequel est inséré de l'asm.

Sauriez vous donc pourquoi la précision laisse quelque peu a désirer (J'en ai une de l'ordre de 10^-4 avec la derniere décimale arrondi) ?

merci[/quote]