IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Cast ou précision des float différents sous linux et windows ??!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut Cast ou précision des float différents sous linux et windows ??!
    J'ai un petit problème après une compilation d'un prog écrit sous linux que je voulais test sous windows.

    Voilà le même code me donne pas le même résultat selon l'O.S
    Sous linux je compile dans le terminal avec gcc, via code:: sous windows, les options de compil sont les mêmes, le fichier .C est le même.

    Voici la partie de code qui foire :
    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
     
    int zoomPixbuf (void **adressePixbuf,float zoomValeur)
    {
      float width;
     
      GdkPixbuf *pixbuf;
     
      pixbuf = (GdkPixbuf *)((gpointer)*adressePixbuf);
     
       width = gdk_pixbuf_get_width(pixbuf)*zoomValeur;
     
     
        printf("%f\n",width);
        printf("%f\n",gdk_pixbuf_get_width(pixbuf)*zoomValeur);
        printf("%f\n",(float)(gdk_pixbuf_get_width(pixbuf)*zoomValeur));
     
    .....
     
    }
    float zoomValeur = 100.0/gdk_pixbuf_get_width(pixbuf);
    int gdk_pixbuf_get_width(pixbuf) = 66;

    Sous linux :
    100.000000
    100.000000
    100.000000

    Sous Windows (Vista) :
    100.000000
    99.999999
    99.999999

    Du coup, quand je casterais en int sous windows les deux dernières versions, je me retrouve avec 99 et pas 100 comme valeur !

    Pouvez vous éclairer ma lanterne SVP

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Déjà en ce qui concerne le cast en int, c'est normal, en effet, caster un float/double en int revient à tronquer le nombre et ne garder que la partie entière, pas d'arrondie...
    Pour le nombre c'est vraiment bizarre, je sais que la précision d'un float laisse à désirer et donc que tout les réels ne peuvent pas être représenté, mais là il s'agit de la même variable semble-t-il... À moins que ce ne soit pas la même ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    Citation Envoyé par PsychoH13
    Déjà en ce qui concerne le cast en int, c'est normal, en effet, caster un float/double en int revient à tronquer le nombre et ne garder que la partie entière, pas d'arrondie...?
    +1 pas de problème pour le cast de int, ça c'est ce qui découle au final du problème (je récupre 99 au lieu de 100), mon souci c'est plutôt le cast en float d'avant qui se fait mal ...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    je crains que ce soit la meme chose.... la précision d'un flot est de 1.e-7 (en relatif) et tu atteinds cette précision...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    Citation Envoyé par reptils
    je crains que ce soit la meme chose.... la précision d'un flot est de 1.e-7 (en relatif) et tu atteinds cette précision...
    Mais pourquoi cette différence entre les deux 0.S ? un float en c sous windows ou linux ça reste un float non ?

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Trois sources possibles de difference:
    - la norme autorise a faire certains calculs avec une precision plus elevee. Des compilateurs differents peuvent faire des choix differents (en particulier sous Linux utiliser des long double de 80 bits)
    - gcc pour x86 ne respecte pas la norme et fait d'autres calculs avec une precision plus elevee qu'autorisee
    - des optimisations differentes peuvent introduire des petites differences aussi en restant dans le cadre de la norme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rendu PHP différent sous Linux et Windows
    Par AnatomicJC dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 25/06/2009, 15h29
  2. Ecrire dans des partitions NTFS sous linux
    Par PhiberOptik dans le forum Administration système
    Réponses: 9
    Dernier message: 28/11/2006, 15h09
  3. Créer et utiliser des fichiers excel sous linux
    Par cronos6 dans le forum Zope
    Réponses: 2
    Dernier message: 02/06/2006, 09h14
  4. [Javascript] Précision des float
    Par NicoNours dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/03/2006, 09h12
  5. Lire des fichiers iso sous linux
    Par wodel dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/11/2005, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo