float VS long

float VS long - C++ - Programmation

Marsh Posté le 09-05-2005 à 17:32:14    

Bonjour, j'aimerais savoir si de nos jours avec les P4 les opérations sur les float sont aussi, vopir plus rapide qu'avec les long ou les int !!!
 
Merci de votre aide

Reply

Marsh Posté le 09-05-2005 à 17:32:14   

Reply

Marsh Posté le 09-05-2005 à 17:36:25    

gni...
ça veux pas dire grand chose...
l'emploi n'est pas le même...

Reply

Marsh Posté le 15-05-2005 à 22:27:12    

non, c'est plus lent
simplement sur p4 avec le SSE2 et l'instruction addsd (add scalar double) c'est plus rapide qu'en FPU (fadd, floating-point add)
 
le jour où un calcul FP sera plus rapide qu'un calcul avec entiers c'est qu'il y aura un problème.
 
Cela dit certains processeurs comme les GPU graphiques sont conçus pour fonctionner surtout avec des flottants.

Reply

Marsh Posté le 15-05-2005 à 23:08:54    

toutafé, les calculs en flottants sont forcément plus complexes qu'en entier ça se payes forcément à un niveau (transistors, cycles par inst même en prenant en compte les recouvrements, latence)

Reply

Marsh Posté le 15-05-2005 à 23:09:42    

mais bon l'emploi n'est pas le même, donc quand tu es obligé de faire du float ou double, tu te poses pas la question de savoir si en entier ce serait plus rentable.

Reply

Marsh Posté le 15-05-2005 à 23:22:40    

pas forcement
soient :
 
double a, b;
 
quel est le mieux ?
((int)(a / b)) + 1;
ou
(int)((a + b) / b);
 
dans un cas addition double, dans l'autre cas addition int. Il est utile de se demander quelle écriture est la + rapide.
Je dirais que c'est la 1ere.

Reply

Marsh Posté le 16-05-2005 à 11:39:19    

jesus_christ a écrit :

pas forcement
soient :
 
double a, b;
 
quel est le mieux ?
((int)(a / b)) + 1;
ou
(int)((a + b) / b);
 
dans un cas addition double, dans l'autre cas addition int. Il est utile de se demander quelle écriture est la + rapide.
Je dirais que c'est la 1ere.


 
Dans ce cas là, autant faire la division en calcul entier aussi, non ?

Reply

Marsh Posté le 16-05-2005 à 15:56:52    

je parles pas de cas ambigus, je parles de cas clairs: du traitement de géométrie 3D, des calculs de maths/physique....
 
oué c'est sûr on peut le faire en entier en virgule fixe dans certains cas, on peut utiliser une lib (qui peut même être plus précise que ce que le cpu offre nativement en virgule flottante)
 
etc... etc... mais bon oui le flottant c'est plus lourd que de l'entier, mais y'a des cas où t'as pas trop le choix...

Reply

Marsh Posté le 17-05-2005 à 07:12:18    

jesus_christ a écrit :

pas forcement
soient :
 
double a, b;
 
quel est le mieux ?
((int)(a / b)) + 1;
ou
(int)((a + b) / b);
 
dans un cas addition double, dans l'autre cas addition int. Il est utile de se demander quelle écriture est la + rapide.
Je dirais que c'est la 1ere.


 
L'important serait de savoir quand exactement l'algo supporte la perte de precision : il ne rime a rien ton exemple.


Message édité par cnstrnd le 17-05-2005 à 07:15:33
Reply

Marsh Posté le 27-05-2005 à 16:22:14    

d'après mes propres tests, les calculs en FPU sont plus rapides avec des float qu'avec des entiers en CPU ...
 

Reply

Marsh Posté le 27-05-2005 à 16:22:14   

Reply

Marsh Posté le 27-05-2005 à 17:28:41    

Théoriquement, le passage en 64 bits n'a pas changé la longueur des float et des double, (32 bits et 64 bits).
 
il existe aussi les long double qui font 80 bits

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed