Probleme avec "possible loss of precision"

Résolu
mleloc Messages postés 10 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 19 mars 2007 - 28 oct. 2006 à 18:45
mleloc Messages postés 10 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 19 mars 2007 - 29 oct. 2006 à 11:53
Bonjour a tous, j'ai un petit probleme avec ce morceau de code:

class ZoneDessin extends Canvas
{
    float charge1;
    float abscisse;
    Point p;
   
    ZoneDessin(Point pclic, float charge, float x)
    {
        p=pclic;
        charge1=charge;
        abscisse=x;   
    }
   
    public void paint(Graphics g)
    {
       
        //Decalage des coord de p dans la zone dessin
        p.setLocation(p.getX() - 280,p.getY() - 50);
       
       
        int xq1 = (int)250+abscisse;
        int yq1 = 0;
       
        int xq2 = (int)250-abscisse;
        int yq2 = 0;

        int xp = (int)p.getX();
        int yp = (int)p.getY();
       
        g.drawLine(250,0,250,500);
        g.drawLine(0,250,500,250);
        g.drawOval(xq1,yq1,1,1); //affichage de q1
        g.drawOval(xq2,yq2,1,1); //affichage de q2
        g.drawOval(xp,yp,1,1); //affichage du point cliqué
       
    }

}

Le compilateur m'indique une possible loss of precision alors que j'ai bien spécifié que je voulais "caster" mes floats.Je croyais que cette manipulation enlevait cette erreur mais apparement pas...
J'espere que l'un d'entre vous pourra m'aider

Merci!

7 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 oct. 2006 à 19:10
Salut,

essai plustot de caster comme suit :

int xq1 = 250+(int)abscisse;
int xq2 = 250-(int)abscisse;

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
29 oct. 2006 à 00:33
Salut:

int xq1 = (int)(250+abscisse);
int xq2 = (int)(250-abscisse);
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 oct. 2006 à 00:43
Salut,

ridicule...... tu castes 250 en float(le casting se fait toujours vers la precision la plus grande) pour ensuite caster le resultat en int c'est assez bof bof quand meme.......
sachant que 250 n'a pas de partie decimale l'arrondi du resultat revient à l'arrondi d'abscisse, il est donc inutile de faire une addition et/ou une sourstaction en flottant alors qu'en integer(moins gourmant en cycle cpu) on aboutit au meme résultat.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
29 oct. 2006 à 00:50
Salut:

Non, cher Mr.

(int)(250-x) est différente de 250-(int)x.

Contre exemple:

x = 2,5f



(int)(250-x) donne 247

250-(int)x   donne 248
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 oct. 2006 à 01:15
Salut,

ici je ne parle pas du résultat sur la soustraction mais du nombre des perfs avec un cast de 250 en float pour le recaster en int :
x = 2,5f
(int)(250-x)//ici le cast de 250 en float est implicite pour ensuite recaster le tout en int.....

maintenant si le but est d'avoir la précision exacte tufais tout les calcules en float pour le caster en int au final!

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
29 oct. 2006 à 01:24
Salut:

Tu viens de le dire "PRECISION".
0
mleloc Messages postés 10 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 19 mars 2007
29 oct. 2006 à 11:53
Merci a vous deux pour vos réponses engagées La solution de Twinuts fonctionne très bien. Comme un boulet j'avais mal placé le (int), en fait je pensais que ca agissait sur toute l'expression enfin bref. Merci a vous!
0
Rejoignez-nous