Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes d'arrondis

Erreur non constante

    24 avril 2015 à 11:13:05

    Salut les Zér0s!

    Je fais face à un problème lié aux erreurs d'arrondis dans mon code Java. Ma question est la suivante: quand un calcul avec des nombres de type double entraîne une erreur d'arrondi, cette erreur peut-elle être différente d'une exécution à l'autre, y compris si on utilise la même machine physique et la même JVM?

    Détails supplémentaires:

    Il s'agit d'un jeu 2D simulant la trajectoire d'une fusée dans un système solaire.
    Au lancement du programme, je charge les coordonnées initiales de la fusée et des planètes depuis un fichier texte, puis je calcule les trajectoires, en temps discret, en calculant les forces de gravitation.

    L'état initial de mon système est donc toujours le même. Et pourtant, en lançant le même programme plusieurs fois, j'obtiens des trajectoires différentes. Je m'attendais à avoir toujours le même résultat, et j'ai donc été surpris.

    Quelqu'un a t'il une idée sur la question?

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2015 à 15:08:34

      C'est en posant bien la question qu'on en trouve la réponse.

      Mon problème n'était pas lié à des arrondis; j'ai d'ailleurs vérifié que j'obtenais le même résultat jusqu'au dernier chiffre significatif, et même après 30000 étapes.

      J'utilise en fait un Timer qui déclenche régulièrement un calcul pour mettre à jour des positions des planètes et de la fusée. Il se trouve que ce travail de mise à jour était plus long que la période du timer, et qu'un nouveau calcul était parfois lancé avant la fin du précédent, et donc les valeurs lues n'étaient pas consistantes.

      Solution: mettre en exclusion mutuelle cette fonction d'update, en ajoutant simplement le mot-clé "synchronized", et se souvenir que "Swing is NOT thread-safe".
      • Partager sur Facebook
      • Partager sur Twitter

      Problèmes d'arrondis

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown