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

Fortran Discussion :

soustraction avec un très petit nombre


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut soustraction avec un très petit nombre
    Bonjour

    J'ai un problème pour soustraire un nombre décimal du type 20461.6547897456978512 avec 2.0d-11.

    En fait je remarque que la soustraction n'a pas lieu.

    Comment puis-je faire ?

    J'ai pensé à ne faire l'opération que sur la partie fractionnaire de 20461.65..., donc en utilisant la fonction FRACTION(x), mais cette fonction ne me retourne pas du tout la partie décimale du mon grand nombre (ça me retourne une partie décimale qui n'a rien à voir).

    Peut-être qu'on peut "forcer" la soustraction sur un digit en particulier, je ne sais pas si cela est possible.


    Merci beaucoup de votre aide.

  2. #2
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    il y a 16 ordres de grandeurs de différences entre tes deux nombre.... dans n'importe quel domaine de la physique on te dira que tu as une quantité négligeable devant l'autre....

    quelle est le précision d'obtention de ta première valeur... si tes algo sont des trucs classique, cela doit tourner vers les 10^-7 10^-10 au mieux....

    il vaut mieux que tu cherche à contourner cette soustraction...

    quel est le contexte? (pourquoi tu as absolument besoin de comparer deux nombre ayant 16 ordres de grandeur de différence?)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut
    En fait j'ai une date en jour julien (de l'odre de 10^4), à laquelle je dois retrancher un délai de quelques microsecondes, qui convertis en jour julien est de l'ordre de 10^-11.

    Je sais que cela semble négligeable, mais au final le résultat de l'exécution de tout mon programme est en picomètre/s², donc il n'est pas évident que mon délai de quelques microsecondes n'ait aucune influence sur le résultat.

  4. #4
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    dans ce cas, as-tu vraiment besoin de la date? la durée ne suffit-t-elle pas?

    et au fait pm/s²= mm/ms² moi j'écrirait donc en millimètre par microsecondes au carré! par contre ça n'accélère pas vite ton truc :p

    "pour entrer dans une pièce, au lieu d'essayer de traverser le mur, il est plus simple de le longer et trouver la porte d'entrée"

    ne pas oublier de savoir ce que l'on veux: par exemple soustraire un très grand nombre par un très petit, si c'est la variation que l'on cherche alors c'est inutile... de même si tu dois calculer la division de deux très grand nombre, le résultat sera un nombre de taille moyenne...

    tu peux par exemple raisoner avec la date julien mais calculée depuis le début d'éxécution de ton programme et lorsque que tu as effectivement besoin de cette valeur, tu n'a qu'à rajouter le morceau qui maque...

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut
    Oui j'ai besoin de la date. J'ai une mesure qui était initialement calculée à la date t (donc le temps t est en entrée dans des subroutines), et je la veux en fait à la date t-délai, même si ce changement est infime.

    Pour l'unité de mon accélération, désolé de te contredire mais tous les papiers publiés sur le sujet sur lequel je travail utilisent cette unité (voire le dixième de nm/s²). Et heureusement que l'accélération est faible, il s'agit de l'anomalie Pioneer...

    Mais d'un point de vue programmation, sans chercher des trucs du genre "en as-tu vraiment besoin", il n'y a aucun moyen de "forcer" l'ordi à faire ce genre d'opération ?

  6. #6
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    tu cherche à calculer le volume d'une mole de pomme=> ton ordi va te répondre "c'est à peu près le volume de de la lune" ensuite tu va lui demander enlève une pomme à ce volume quel est le résultats: "c'est à peu près le volume de de la lune"....

    c'est ta méthode d'approximation et/ou discrétisation qui est en cause pas l'ordinateur, il a effectivement fait ta soustraction... mais je te conseil d'avoir de sacrément petites valeurs pour la précision de tes algos... de plus tes capteurs on une tolérance... j'espère qu'elle est franchement petite... toute ces petites "erreurs" de calcul s'accumulent au cours d'un calcul (quelque soit la nature du calcul) si la précision finale voulue est très petite... alors il FAUT que TOUS ce qui est avant ait une précision beaucoup plus faible...

    forcer l'ordi: tu l'as déjà fait! 'c=a-b' => je force l'ordi à faire le calcul de la soustraction de a par b et de la stocker dans c
    il pratique simplement le 'question débile->réponse débile'
    si tu veux ce résultat il faut trouver une autre façon de poser la question... bienvenu en algorithmique!

    j'ai fait le test chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=20461.6547897456978512D0-2.0d-11.
    print*,a
    me renvoie:
    20461.6547897456778512
    il a bien fait l'opération...

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Citation Envoyé par djocin Voir le message
    Mais d'un point de vue programmation, sans chercher des trucs du genre "en as-tu vraiment besoin", il n'y a aucun moyen de "forcer" l'ordi à faire ce genre d'opération ?
    Bien sûr que si, il faut"simplement" passer à des niveaux de précision plus élevés; certains compilateurs intègrent la "quadruple précision" (c.-à-d. des variables déclarées en tant que real*16) ce qui serait clairement suffisant dans ton cas, sinon il faut faire appel à des librairies spécialisées capables de manipuler des précisions arbitraires, comme par exemples celles mentionnées ici.

Discussions similaires

  1. precision et très petits nombres
    Par membreComplexe12 dans le forum C
    Réponses: 9
    Dernier message: 11/05/2011, 16h03
  2. Calculs sur de très petits nombres (0-255)
    Par Kaluza dans le forum Langage
    Réponses: 11
    Dernier message: 06/04/2011, 15h13
  3. un nombre double très petit
    Par pipip dans le forum Langage
    Réponses: 9
    Dernier message: 27/12/2008, 20h04
  4. Calcul une soustraction avec seulement les 2 premier nombre
    Par tatrimaru dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/07/2007, 17h33
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

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