Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Float vs Double

20 réponses
Avatar
korchkidu
Bonjour,

je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?
Et en ce qui concerne la taille memoire?
Rem: je parle pour le cas d'un PC normal hein...

Merci,
K.
PS: ces questions peuvent paraitre idiotes mais on a souvent des
surprises en fait...

10 réponses

1 2
Avatar
Marc Boyer
Le 07-02-2006, korchkidu a écrit :
je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?


Non. Il se pourrait même que ce soit le contraire
d'ailleurs.
Je ne retrouve plus exactement les infos, mais l'idée
de double serait d'être justement le type 'le plus naturel'
pour représenter les flottants pour le processeur cible.

Et en ce qui concerne la taille memoire?


sizeof(float) <= sizeof(double)

Rem: je parle pour le cas d'un PC normal hein...


Un Wintel ?

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain

Avatar
Laurent Deniau
korchkidu wrote:
Bonjour,

je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?


Generalement non. Parce que les CPU recent (disons >1990) ont une FPU
qui manipule des nombres >= double. Donc ils vont convertir le float en
double avant de travailler dessus.

Et en ce qui concerne la taille memoire?


C'est le seul interet des floats.

Rem: je parle pour le cas d'un PC normal hein...


J'en tiens compte ci-dessus.

Merci,
K.
PS: ces questions peuvent paraitre idiotes mais on a souvent des
surprises en fait...


Pour eviter les surprises, utilise des doubles partout et des long
double dans les calculs intermediaires. Le nec plus ultra etant
d'utiliser la bibliotheque MPFR (http://www.mpfr.org/) si possible.

a+, ld.

Avatar
korchkidu
Marc Boyer wrote:


je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?



Non. Il se pourrait même que ce soit le contraire
d'ailleurs.
Je ne retrouve plus exactement les infos, mais l'idée
de double serait d'être justement le type 'le plus naturel'
pour représenter les flottants pour le processeur cible.
Il me semblait bien aussi. Si tu retrouves les infos je suis super

preneur car justement, on debat de l'utilité d'utiliser des float pour
un truc qui doit faire tout plein de calculs et on sacrifie la précision
pour la (pseudo?) rapidité des floats sur les doubles...

Et en ce qui concerne la taille memoire?



sizeof(float) <= sizeof(double)
Ok, donc ca, c'est regle et c'est logique...;))



Avatar
Marc Boyer
Le 07-02-2006, korchkidu a écrit :
Marc Boyer wrote:


je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?



Non. Il se pourrait même que ce soit le contraire
d'ailleurs.
Je ne retrouve plus exactement les infos, mais l'idée
de double serait d'être justement le type 'le plus naturel'
pour représenter les flottants pour le processeur cible.


Il me semblait bien aussi. Si tu retrouves les infos je suis super
preneur car justement, on debat de l'utilité d'utiliser des float pour
un truc qui doit faire tout plein de calculs et on sacrifie la précision
pour la (pseudo?) rapidité des floats sur les doubles...


La seule info dans ce sens que je retrouve, c'est qu'en 'traditionnal
C' (K&R), il y avait conversion systématique des floats en double
pour toute opération. Donc, un compilateur soucieux de performance
devait surement prendre pour double le truc le moins couteux.

Après, en ce qui concerne votre architecture cible, il
suffit de regarder sizeof(double) et sizeof(float),
puis la doc du processeur ;-)

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain



Avatar
Pierre Maurette
Bonjour,

je cherche a savoir s'il est reellement plus rapide d'utiliser des floats que
des doubles et pourquoi?
En général, la réponse lue par-ci par-là est "non, pas de façon

sensible, utiliser des double sauf problème de taille". Prenons le cas
des PC x86. float sur 32 bits, double sur 64 bits, extended sur 80
bits. Oublions les derniers, ils ne correspondent aux long double que
sur certains compilateurs.
Le calcul lui-même prend très certainement le même temps pour les deux
tailles. En revanche, y avoir transferts dans les deux sens entre la
mémoire (ou un ou deux registres généraux) et un registre de calcul
flottant (x86, je rappelle). Sur les machines dans lesquelles
sizeof(int) vaut sizeof(float), avantage peut-être aux float. Mais
sizeof(int) = sizeof(double) se répand. Et là, égalité ou avantage aux
double.
Notez que vous visez une archi précise, vous pouvez donc faire des
tests.

Attention! Dans certaines applications, par exemple sur des données
multimédia, les float suffiront largement. Le gain de taille sera de 1
pour 2. Et si vous faites du calcul parallèle sur ces données, il
faudra impérativement utiliser des float.

Et en ce qui concerne la taille memoire?
Du simple au double en x86. LE gain est réel, je ne vois pas de raison

qu'il disparaisse par alignement par exemple. Ce gain se retrouve sur
les fichiers et les transferts.

Rem: je parle pour le cas d'un PC normal hein...
PC normal, x86 sous Windows et Linux par exemple ?

Parce qu'on ne peut pas donner une réponse indépendante du hardware,
bien entendu. Au pire, un PC qui émulerait une inexistante unité de
calcul en virgule flottante serait sensiblement plus rapide sur des
float que sur des double.

--
Pierre Maurette

Avatar
Eric Levenez
Le 7/02/06 14:16, dans <43e89dca$, « korchkidu »
a écrit :

je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?


Je suppose que tu as lu le chapitre 11.10 de la FAQ de ce NG ?

<http://www.faqs.org/faqs/fr/comp/lang/faq-c-2/>

La réponse à ta question est : cela dépend.

Si l'on utilise des fonctions comme sin, cos... Alors la réponse est non. Si
on utilise les fonctions C99 type sinf, cosf, la réponse est généralement
oui.

Mais cela change aussi selon les options de compilations, les CPU...

Et en ce qui concerne la taille memoire?


Le double prend généralement plus de place en mémoire qu'un float. Mais il
existe des architectures où ce n'est pas le cas. Sur ma machine de travail
(un DSP), le sizeof d'un char, int, short, float ou double donne 1 dans tous
les cas.

Rem: je parle pour le cas d'un PC normal hein...


C'est quoi "normal" pour toi ? Linux est anormal ? Mac OS X est anormal ?

PS: ces questions peuvent paraitre idiotes mais on a souvent des
surprises en fait...


Si tu testes le programmes du § 11.10, tu seras surpris des résultats.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Emmanuel Delahaye
je cherche a savoir s'il est reellement plus rapide d'utiliser des
floats que des doubles et pourquoi?


Aucune réponse toute faite. Il faut faire des mesures. J'aurais tendance
à penser que les doubles sont plus rapides, car ils induisent moins de
conversion.

Mais en C99, toutes les fonctions méthématiques ont été doublées (Hi
hi!) en float. DOnc, plus de conversion et pribablement une vitesse
accrue...

Et en ce qui concerne la taille memoire?


En principe, les float prennent moins de place. C'est utile pour de
grand tableaux de flottants.

--
A+

Emmanuel Delahaye

Avatar
Vincent Lefevre
Dans l'article <dsa7g1$t0c$,
Laurent Deniau écrit:

Pour eviter les surprises, utilise des doubles partout et des long
double dans les calculs intermediaires.


Tout dépend du processeur et de l'OS. Il faut savoir qu'avec le FPU
traditionnel du x86, les calculs se feront soit en double précision
IEEE 754, soit en double étendu, quel que soit le type utilisé.
Plus les bugs du compilateur... Avec d'autres processeurs,
long double = double.

Le nec plus ultra etant d'utiliser la bibliotheque MPFR
(http://www.mpfr.org/) si possible.


Oui. :)

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Vincent Lefevre
Dans l'article ,
Pierre Maurette écrit:
[...]
Le calcul lui-même prend très certainement le même temps pour les deux
tailles. En revanche, y avoir transferts dans les deux sens entre la
mémoire (ou un ou deux registres généraux) et un registre de calcul
flottant (x86, je rappelle). Sur les machines dans lesquelles
sizeof(int) vaut sizeof(float), avantage peut-être aux float. Mais
sizeof(int) = sizeof(double) se répand. Et là, égalité ou avantage aux
double.


Euh... sizeof(int) = sizeof(double), ce n'est pas très courant.
En pratique, ça veut dire des int sur 64 bits (au moins).

Et en ce qui concerne la taille memoire?
Du simple au double en x86. LE gain est réel, je ne vois pas de raison

qu'il disparaisse par alignement par exemple. Ce gain se retrouve sur
les fichiers et les transferts.


Et encore, dans les fichiers et les transferts, on convertit souvent
les flottants en chaîne ASCII (en décimal), pour des raisons de
portabilité. Dans la pratique, si ça pose un problème au niveau
mémoire, on peut éventuellement réduire la précision de la chaîne
ASCII, et compresser.

Maintenant les machines ont "beaucoup" de mémoire, donc ça ne pose plus
trop de problème, peut-être à part pour de très gros calculs, mais dans
ce cas, la précision d'un float n'est probablement pas suffisante (et
même celle d'un double...).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
Vincent Lefevre
Dans l'article <43e8de85$0$22678$,
Emmanuel Delahaye écrit:

Aucune réponse toute faite. Il faut faire des mesures. J'aurais tendance
à penser que les doubles sont plus rapides, car ils induisent moins de
conversion.

Mais en C99, toutes les fonctions méthématiques ont été doublées (Hi
hi!) en float. DOnc, plus de conversion et pribablement une vitesse
accrue...


Il y a une conversion avec la plupart des processeurs, qui travaillent
soit en double précision, soit en précision étendue. En revanche, c'est
probablement plus rapide car le résultat a besoin de moins de précision.
Maintenant, ça dépend complètement de l'implémentation (la version
float peut très bien être la même que la version double).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

1 2