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 Java Discussion :

Les calculs entiers sont-ils toujours plus rapides qu'en double/flottant ?


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 61
    Points : 136
    Points
    136
    Par défaut Les calculs entiers sont-ils toujours plus rapides qu'en double/flottant ?
    Bonjour,

    Etant un dinosaure de l'info je ne suis plus trop au courant des performances actuelles concernant les calculs sur nombres entiers/flottants.

    Il y a très longtemps de ça ... pour optimiser du code on convertissait souvent des nombres à virgules fixes (et à valeurs bornées par un intervalle) en entiers (ex: 102,25 => 10225) pour ensuite faire tous les calculs en entiers et ça boostait énormément les performances d'algos très gourmands en calculs.

    En java 8 et avec les processeurs modernes (i5 par exemple) est-ce toujours pertinent en terme de performances ou bien risque-t-on dans certains cas de ralentir les calculs au final ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    c'est toujours plus rapide et ça ne ralentira jamais les choses... De là à ce qu'on constate vraiment une meilleure performance, par contre, c'est une autre histoire.

    Ce n'est pas tant une question de langage ou de microprocesseur, c'est une question de tout ce qu'on fait d'autre que des calculs purement numériques dans un programme moderne. Il est probable que ton programme passera moins d'un dix-millème de son temps à faire des calculs sur tes nombres flottants. Alors imaginons que tu travailles à rendre ça plus performant et dix ou vingt fois plus rapide... Sur quelque chose qui était déjà si rapide que ton programme n'y passait même pas le dix-millième de son temps... Qui le remarquera ? Qui en profitera ?

    Avant de chercher à optimiser quelque chose, il faut déjà vérifier que ton programme passe son temps dedans. Sinon, tu optimises un truc pour réduire un coût qui était déjà zéro.

    A noter que travailler avec des entiers plutôt que des flottants, c'est aussi quelque chose qu'on fait dans les calculs monétaires : compter des centimes au lieu de compter des euros. Ou des dix-millièmes d'euro quand on veut gérer quatre chiffres après l'unité.
    Ce n'est pas pour des raisons de performances, c'est pour des raisons d'exactitude. Les calculs flottants sont approchés, et donc en s'en servant on obtient des résultats approchés et des résultats monétaires approchés. Avec des entiers, on obtient des résultats exacts. C'est souvent une obligation, légale ou de pur bon sens.
    A noter également que ces questions d'exactitude peuvent être résolues en utilisant BigDecimal et en comptant des euros à virgule normalement plutôt qu'avec des entiers. Et que oui les performances sont infiniment moins bonnes en faisant comme ça. Mais à nouveau, ce n'est pas tant une question de performance qu'une question de maintenabilité du code : les algorithmes utilisant BigDecimal au lieu d'un type primitif sont super illisibles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 61
    Points : 136
    Points
    136
    Par défaut
    Merci de ta réponse !

    Effectivement je vais manipuler les données boursières donc à précision fixe après la virgule donc les entiers seront bien adaptés.

    Il faut juste que je fasse attention aux dépassements de capacité des entiers que je vais utiliser mais j'ai l'habitude de ce genre de choses.

    Je ne suis donc pas totalement obsolète

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a noter que je lit quand même de temps en temps que dans le domaine boursier ils préfèrent perdre 1cent sur un compte de temps en temps que de perdre des centaines de milliers d'euros en cout de développement pour "pas utiliser les flottants" C'est surtout une question de risque vs coût de ce coté là.

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    a noter que je lit quand même de temps en temps que dans le domaine boursier ils préfèrent perdre 1cent sur un compte de temps en temps que de perdre des centaines de milliers d'euros en cout de développement pour "pas utiliser les flottants" C'est surtout une question de risque vs coût de ce coté là.
    j'ai connu aussi l'inverse (à l'époque où je travaillais pour le coté obscur de la force ) on avait une appli financière portée sur différentes plateformes ... et on a eu de problèmes parce que les coproc Alpha (in memoriam) faisaient que des bilans ne tombaient plus justes à un quart de poil près! D'accord c'était du C!
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais mais boursicoter et dresser des bilans financiers sont deux choses différentes avec des contraintes légales et pragmatiques bien distinctes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je parlais bien de banque et pas de boursicottage

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    La bourse c'est boursicoter que ce soit fait par mon voisin ou par une banque.

    Ce que je veux dire c'est que quand on compte de la monnaie, et qu'on tombe pas pile au centime près,

    - Il y a des situations où on doit accepter de perdre le centime
    - Et il y a des situations où si on peut vraiment pas montrer un résultat qui tombe pile, les conséquences vont se payer en part de société.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par thelvin Voir le message
    La bourse c'est boursicoter que ce soit fait par mon voisin ou par une banque.
    Oui oui, j'ai pris le mauvais terme mais sur le cas en question on parlais bien de compte bancaire qui devaient tomber juste au centime. Et les doubles suffisaient amplement sauf cas rarissime pour lesquels il était moins cher de prévoir 100.000€ en reserve pour compenser les centimes perdus coccasionellement par la banque

Discussions similaires

  1. Les annuaires sont-ils toujours utiles ?
    Par rodolphebrd dans le forum Référencement
    Réponses: 1
    Dernier message: 07/01/2014, 11h44
  2. Réponses: 41
    Dernier message: 20/09/2012, 16h19
  3. Réponses: 2
    Dernier message: 17/09/2011, 09h42
  4. Les drivers ODBC sont-ils nécessairement payants ?
    Par Draekonyss dans le forum 4D
    Réponses: 5
    Dernier message: 20/04/2006, 18h50

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