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

Langage Delphi Discussion :

Précision d'une valeur


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 149
    Points : 73
    Points
    73
    Par défaut Précision d'une valeur
    Bonjour
    j'ai un petit soucis de précision sur la valeur retournée sur l'instruction val

    ex:

    retour est un GLFloat

    Mot:='0.77777';
    val(Mot, retour, V);

    retour me retourne 0.77776998281

    c'est sur 5 chiffres après la virgule... mais sur l'échelle c'est le mètre et que je zome sur des microns ça dérange!

    Donc comment initialiser?
    J'ai essayé en complétant Mot avec
    Mot := Mot + '000000000000000000000000000000000000000';
    mais le résultat est identique!!
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    GLFloat de OpenGL ?
    C'est un single (équivalent du float en C++, single precision float)
    Qui est peu précis !
    il faut utiliser un double (idem en C++)

    En théorie, il ne faut pas compter plus de :
    - 7 chiffres après la virgule pour le type float/single
    - 16 chiffres après la virgule pour le type double
    - 20 chiffres après la virgule pour le type long double/extended

    En Pratique, c'est nettement moins, le single est tellement mauvais dès 4 digits, qu'il existe le Currency pour garantir l'exactitude de calcul monétaire !
    Mais pour les taux de change, cela monte à 6 chiffres, le double est donc obligatoire !

    Pour les mathématiques, donc la 3D, le double est a mon avis indispensable mais souvent on n'utilise pas un chiffre brut mais on compare avec une marge d'erreur (Epsilon avec IsZero, SameValue de l'unité Math)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 149
    Points : 73
    Points
    73
    Par défaut Que prendre comme valeur
    Merci de cette réponse rapide

    En fait j'ai repris un exemple pour faire de la 3D et les triangles utilisent des GLFloat pour les points

    J'ai donc modifier toutes les définitions GlFlaot et GLDouble et c'est OK

    J'espère que les primitives (GL_Traingles...) prennent le GLDouble

    A+

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par lio908 Voir le message
    Merci de cette réponse rapide

    En fait j'ai repris un exemple pour faire de la 3D et les triangles utilisent des GLFloat pour les points

    J'ai donc modifier toutes les définitions GlFlaot et GLDouble et c'est OK

    J'espère que les primitives (GL_Traingles...) prennent le GLDouble

    A+
    OpenGL travaille en Integer, Single ou Double...mais Single ça marche très bien, le 0.00006998281 de différence n'en fera pas justement.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 668
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 668
    Points : 7 008
    Points
    7 008
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    OpenGL travaille en Integer, Single ou Double...mais Single ça marche très bien, le 0.00006998281 de différence n'en fera pas justement.
    C'est à dire ?
    Il faut utiliser explicitement Single, et non GlFloat ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 149
    Points : 73
    Points
    73
    Par défaut Merci a tous
    Bonjour,

    Pour moi les réponses proposées me conviennent donc je met résolu sur cette discution.

    Merci (j'en lance une autre sur les listes chainées...)

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Lung Voir le message
    C'est à dire ?
    Il faut utiliser explicitement Single, et non GlFloat ?
    euh...GLFloat EST un Single

    je doutais simplement que le delta soit visible à l'écran...mais bon tout dépend du facteur de zoom, de la profondeur, etc...

    ce qui est explicite dans l'API OpenGL ce sont les paramètres,

    pour définir un point 3D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glVertex3i(x,y,z: GLInt); // Integer
    glVertex3f(x,y,z: GLFloat); // Single
    glVertex3d(x,y,z: GLDouble); // Double
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 668
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 668
    Points : 7 008
    Points
    7 008
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    euh...GLFloat EST un Single

    je doutais simplement que le delta soit visible à l'écran...mais bon tout dépend du facteur de zoom, de la profondeur, etc...

    ce qui est explicite dans l'API OpenGL ce sont les paramètres,

    pour définir un point 3D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glVertex3i(x,y,z: GLInt); // Integer
    glVertex3f(x,y,z: GLFloat); // Single
    glVertex3d(x,y,z: GLDouble); // Double
    Ah d'accord.
    J'ai cru que j'avais raté quelque chose.

    Sinon, c'est vrai que c'est pas facile de régler la précision des calculs pour avoir un bon rendu. Des fois, mieux vaut arrondir, et d'autres fois, faut conserver un maximum de précision.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

Discussions similaires

  1. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52
  2. Lire une valeur dans le registre
    Par John.s dans le forum C
    Réponses: 2
    Dernier message: 26/11/2003, 19h55
  3. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  4. Prendre une valeur dans la grappe XML
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 21/05/2003, 10h26
  5. Afficher une valeur du context
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 13
    Dernier message: 28/04/2003, 13h49

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