mat Le 21/06/2002 à 16:58 La source suivante montre le problème:
#include "c:devkitadvbibliothèquesGLR.h"
void AgbMain()
{
float i;
u8 a,b;
a=3;
b=2;
i=a/b; // i=a/b= 1.5 (normallement)
if(i>1) DrawPix_3(10,10,rgb(31,0,0)); //Bizarrement le pixel affiché est vert
if(i==1) DrawPix_3(10,10,rgb(0,31,0)); //Donc i=1 ???!!!
if(i<1) DrawPix_3(10,10,rgb(0,0,31));
while(1);
}
pourquoi i est il égale à un et non à 1.5 (donc plus grand que 1) ?
Vive le coding gba.
www.codegba.fr.st
mat Le 21/06/2002 à 17:09 En fait je crois avoir compris:
Une division entre deux entiers donne un résultat entier en troncant.
Si je veux un résultat flottant il faut qu'au moins une des valeurs soit un flottant.
Je peux transformer un entier en flottant en mettant (float) devant.
Ainsi i=(float)a/b me donnera le résultat que j'attendais au début.
Est ce juste?
Et y a-t-il d'autres méthodes?
Vive le coding gba.
www.codegba.fr.st
PpHd Le 24/06/2002 à 13:52 Mais les flottants, c lent, car il faut faire une emulation logicielle.
Donc a eviter.
mat Le 24/06/2002 à 14:18 est ce que tu peux m'expliquer plus en détail ce que tu viens de dire.
Vive le coding gba.
www.codegba.fr.st
PpHd Le 24/06/2002 à 16:36 N'utilises pas les float sur GBA !
PpHd Le 25/06/2002 à 10:02 float x,y,z;
x = ...;
y = ...;
z = x + y;
Donnera en fait :
ldmfd r4!,{r0,r1}
ldmfd r5!,{r2,r3}
bl _float_add
stmfd r6!,{r0,r1}
Et en C : z = _float_add(x,y);
mat Le 25/06/2002 à 10:05 Ouais c'est que ça fait intervenir quelques lignes en plus de z=x+y;
A combien de fois vous estimez le rpport de vitesse entre l'utilisation de floats par rapport à des entiers sachant que pour utiliser des entiers à la place il faudra quelques lignes de bidouilles en plus..
Vive le coding gba.
www.codegba.fr.st
PpHd Le 25/06/2002 à 10:13 Beaucoup. Parce que la fonction _float_add n'est pas forcement trivialle a ecrire !
Kevin Kofler Le 25/06/2002 à 15:41Edité par Kevin Kofler le 25/06/2002 à 15:43 La fonction ne s'appelle pas _float_add mais __addsf3.
Et je rappelle que les flottants sont également émulés sur TI-89/92+.