Dans quelles situations est-il préférable d’utiliser un float sur un double en Java?

Plus précisément, à quel point le gain de performance est-il extrême lorsque vous utilisez un float au lieu d’un double en Java?

Étant donné que votre question porte principalement sur les performances, cet article vous présente des calculs spécifiques (n’oubliez pas que cet article est spécifique aux réseaux de neurones et que vos calculs peuvent être complètement différents de ce qu’ils font dans l’article): http: //web.archive.org/web/20150310213841/http://www.heatonresearch.com/content/choosing-between-java%E2%80%99s-float-and-double

Une partie du matériel pertinent du lien est reproduite ici:

Double et float peuvent prendre en charge des nombres relativement importants. Les plages supérieure et inférieure ne sont vraiment pas une considération pour les réseaux de neurones. Float peut gérer des nombres compris entre 1.40129846432481707e-45 et 3.40282346638528860e + 38 … En gros, float peut gérer environ 7 décimales. Un double peut gérer environ 16 décimales.

La multiplication masortingcielle est l’une des opérations mathématiques les plus courantes pour la programmation de réseaux neuronaux. Ce n’est en aucun cas la seule opération, mais cela constituera un bon sharepoint repère. Le programme suivant sera utilisé pour évaluer un double.

En sautant tout le code, le tableau sur le site Web montre que pour une multiplication de masortingce 100×100, ils ont un gain de performance d’environ 10% s’ils utilisent des doublons. Pour une multiplication masortingcielle 500×100, la perte de performance due à l’utilisation de doublons est d’environ 7%. Et pour une multiplication de masortingce 1000×1000, cette perte est d’environ 17%.

Pour la petite masortingce 100×100, le passage à float peut en fait diminuer les performances. À mesure que la taille de la masortingce augmente, le pourcentage de gain augmente. Avec une très grande masortingce, le gain de performance augmente jusqu’à 17%. 17% vaut la peine d’être considéré.

Normalement , j’utiliserais un double , car float n’a pas une précision suffisante pour de nombreux cas d’utilisation numérique et la différence de performances est suffisamment petite pour ne pas avoir d’importance.

Comme toujours, les performances dépendent de la mise en œuvre. Vous devrez donc vous baser sur votre cas particulier afin de déterminer si “cela compte” ou non.

En général j’ai trouvé:

  • La différence de performances pour les opérations individuelles est assez petite, en particulier sur les machines 64 bits. Un float et un long conviendront dans un mot machine de 64 bits. Il y a souvent une différence de zéro.
  • float s a un léger avantage en ce qu’il consum moins de mémoire, ce qui peut aider à réduire la pression du cache du processeur. J’ai constaté que les flottants étaient 30 à 50% plus rapides lors d’opérations simples sur de grands tableaux.

Pourquoi int au lieu de long ?

Pourquoi short au lieu de int ?

Pourquoi byte au lieu de short ?

Tout est une question de performances et d’utilisation de la mémoire. En théorie, plus de scope signifie plus de mémoire, plus de mémoire nécessite plus de votre matériel et cela signifie que plus de batterie sera utilisée.

Les machines actuelles offrent des performances élevées avec des types primitifs. Donc, après tout, vous ne verrez peut-être pas de différence si vous utilisez long au lieu de double et vice-versa, mais les connexions Internet peuvent être lentes en fonction du pays. Il est donc préférable d’utiliser le flottant au lieu de double dans ce cas.

Parlons de short vs int .

Utilisation courte moins de mémoire que int , mais il faut 30% de temps supplémentaire pour être créé (Java), il serait donc préférable de toujours utiliser int au lieu de short ? Cela dépend, un tableau avec 100 s short utilisera beaucoup moins de mémoire qu’un tableau de 100 int s.

Une boucle avec short peut être plus efficace qu’une boucle avec int .

Sur internet, short est beaucoup plus efficace int , peu importe qu’il en faut 30% de plus pour être créé, la bande passante sera petite et l’expérience sera meilleure.

Je vous suggérerais de n’utiliser que ce dont vous aurez besoin. Rappelez-vous: pourquoi 80 si 8 peuvent le faire?

Principalement chez Embedded Systems sans processeur à double opération rapide. Par exemple, les systèmes de navigation, avec des calculs intensifs en processeurs. Mais dans Java, de nombreuses bibliothèques Math convertissent implicitement en double, il est donc peu logique d’utiliser float.

les floats ont besoin de la moitié de la mémoire et sont avantageux si vous avez de très grands tableaux et de la mémoire limitée (dans les périphériques intégrés)

Il faut remplir deux conditions pour utiliser float au lieu de double:

  1. Il y a un gain de performance significatif et utile.
  2. Float est suffisamment précis pour le calcul en question.

L’évaluation de la première condition est relativement simple et facile. Mesurer le travail en utilisant double. Mesurez à nouveau, avec les mêmes entrées et dans d’autres conditions, en utilisant float. La version float est-elle beaucoup plus rapide? D’une manière générale, le principal avantage provient d’une utilisation plus efficace de la bande passante de mémoire cache, de mémoire cache et de transfert de données.

La partie difficile évalue la deuxième condition. Obtenir des réponses insuffisamment précises, voire fausses, est inutile. Pour de nombreux calculs, une parsing relativement simple peut montrer que le double est suffisamment précis. Afficher la même chose pour float est souvent beaucoup plus difficile.