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 :

conversion std::vector<double> en std::vector<float>


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut conversion std::vector<double> en std::vector<float>
    Bonjour, j'ai des std::vector<double> que je dois convertir en std::vector<float> car j'appelle une fonction fortran qui utilise des floats.

    Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::vector<double> v1;
     
    // on suppose que v1 possède tous plein de valeurs
     
    std::vector<float> v2(v1.begin(), v1.edn())
    Et là j'ai un warning du type "possible loss of data", ce qui se comprend. J'ai fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma warning (disable : 4244)
    dans mon .cpp mais j'ai toujours le warning. Comment le supprimer ?

    Autre question : pourquoi si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::vector<double> v1;
     
    // on suppose que v1 possède tous plein de valeurs
     
    std::vector<float> v2 = v1;
    j'ai une erreur. Quelle est la différence avec la 1e version ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,

    Malheureusement, le compilateur a raison: quand tu passe de double à float, tu risque de perdre des données.

    La meilleure solution est donc... d'éviter ce genre de conversion, si tu ne veux pas avoir cet avertissement

    Si tu as bien conscience du fait que tu prend effectivement un risque, mais que tu sais parfaitement ce que tu fais en décidant de recourir à cette conversion parce qu'il t'est impossible de faire autrement, tu peux, simplement, décider de ne pas tenir compte de l'avertissement.

    Mais le mieux serait de voir s'il n'est pas possible d'utiliser soit une fonction équivalente en fortran qui utilisera de double, soit de gérer tes données sous la forme de float en C++.

    A défaut de plus de précision, il nous sera malheureusement difficile de t'aider à faire le bon choix (même si, en règle générale, on peut considérer préférable d'essayer de garder les double )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,

    je comprends tout à fait qu'il vaille mieux garder mes doubles. Malheureusement, le prototype de la fonction fortran que j'appelle utilise des real*4 (donc des floats), et si je lui mets un double * ça ne marche pas, il faut que je lui mette un float * en argument... d'où mon problème de conversion

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Dans ce cas, serait-il difficile de faire en sorte de gérer... des float dans ton programme C++
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    malheureusement oui...

    Tout mon programme utilise des doubles (plusieurs dizaines de milliers de lignes). J'ai juste besoin de cette fonction pour pre-traiter mes données

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Tout mon programme utilise des doubles (plusieurs dizaines de milliers de lignes). J'ai juste besoin de cette fonction pour pre-traiter mes données
    Pas de bol La seule technique valable à mon avis est de convertir les données avec une boucle for classique.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Citation Envoyé par salseropom Voir le message
    malheureusement oui...

    Tout mon programme utilise des doubles (plusieurs dizaines de milliers de lignes). J'ai juste besoin de cette fonction pour pre-traiter mes données
    J'aurais presque alors envie de poser la question de savoir si l'utilisation de double dans ton programme C++ est justifiée.

    Si, pour une raison ou une autre, tu n'a pas le choix d'utiliser des double dans ton programme C++, tu dois te dire que leur conversion en float aura de grandes chances de provoquer des désastres.

    Mais dans le cas inverse, pourquoi avoir choisi d'utiliser des double à la base
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. std::numeric_limits et double
    Par CliffeCSTL dans le forum Débuter
    Réponses: 6
    Dernier message: 22/10/2014, 14h08
  2. std::vector semble ne pas utiliser std::move, pourquoi ?
    Par n0-sheep dans le forum SL & STL
    Réponses: 7
    Dernier message: 15/03/2014, 01h25
  3. Réponses: 4
    Dernier message: 04/06/2012, 15h19
  4. Convertir un std::string en double.
    Par vdumont dans le forum SL & STL
    Réponses: 16
    Dernier message: 10/05/2006, 16h46
  5. Conversion 8 octets en double
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/08/2004, 16h49

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