1

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

2

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

3

mat
a écrit : Est ce juste?

Oui.
Et y a-t-il d'autres méthodes?

Oui, (float)a/(float)b. grin
Ou:
static inline float fdiv(float a, float b) {return a/b;}
fdiv(a,b);

grin
C'est à peu près tout ce qu'il y a comme méthodes.
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é

4

Mais les flottants, c lent, car il faut faire une emulation logicielle.
Donc a eviter.

5

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

6

N'utilises pas les float sur GBA !

7

He, j'ai pas vu les détails wink
C'est quoi une émulatiion logicielle?confus
Vive le coding gba.
www.codegba.fr.st

8

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);

9

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

10

Beaucoup. Parce que la fonction _float_add n'est pas forcement trivialle a ecrire !

11

La fonction ne s'appelle pas _float_add mais __addsf3.

Et je rappelle que les flottants sont également émulés sur TI-89/92+.
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é

12

C'était juste un exemple pour faire comprendre smile