Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1127 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Multiplier par 0.5 ou diviser par 2?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Multiplier par 0.5 ou diviser par 2?

n°403883
CDr
Posté le 22-05-2003 à 10:40:28  profilanswer
 

Je porte un programme Fortran en Java qui doit faire quelques calculs mathématiques. J'ai une formule où la personne qui a fait le programme Fortran a multiplié par -0.5. Je me demandais si c'était mieux que de diviser par -2. Par mieux j'entend plus précis? plus rapide? Pour info je travaille sur des double.
 
Aussi je pose la question pour Java mais je pense que ça doit être pareil pour du C ou autre. (si c'est pas le cas, merci de contribuer à l'amélioration de ma culture générale).


---------------
CDr
mood
Publicité
Posté le 22-05-2003 à 10:40:28  profilanswer
 

n°403887
jagstang
Pa Capona ಠ_ಠ
Posté le 22-05-2003 à 10:44:07  profilanswer
 

D'après mes connaissance, un ordinateur ne sais pas diviser, mais seulement multiplier. Idem pour addition/soustraction...
 
Donc ça change pas grand chose...

n°403910
bobuse
Posté le 22-05-2003 à 10:57:52  profilanswer
 

JagStang a écrit :

D'après mes connaissance, un ordinateur ne sais pas diviser, mais seulement multiplier. Idem pour addition/soustraction...
 
Donc ça change pas grand chose...  


+1
 
remarque pour diviser par deux, tu peux encore mieux faire ...
un petit decalage a droite ;)


---------------
get amaroK plugin
n°403912
chrisbk
-
Posté le 22-05-2003 à 10:59:24  profilanswer
 

bobuse a écrit :


+1
 
remarque pour diviser par deux, tu peux encore mieux faire ...
un petit decalage a droite ;)


 
etant donne qu'il pense multiplié par 0.5, je présuppose qu'il travaille sur des floats, donc ton idee me parait pas super brillante, ceci dit sans vouloir te vexer :D

n°403925
bobuse
Posté le 22-05-2003 à 11:07:30  profilanswer
 

chrisbk a écrit :


 
etant donne qu'il pense multiplié par 0.5, je présuppose qu'il travaille sur des floats, donc ton idee me parait pas super brillante, ceci dit sans vouloir te vexer :D
 


oups [:ddr555]
on va dire que c'est l'intention qui compte ...


---------------
get amaroK plugin
n°404191
CDr
Posté le 22-05-2003 à 13:40:45  profilanswer
 

Je travaille sur des double (je l'ai dit non? j'ai pas oublié? pcq g plus toute ma tête ces temps ci).
 
C'est con je me rappelle plus des cours d'architecture, j'avais su faire des division et multiplications dans les différents modes de numérotation (complément vrai, VA + signe etc...) mais là j'ai oublié. Puis je sais pas comment marche java (déjà que je suis pas sur que les cours s'appliquent à des cas concrets).

n°404613
BifaceMcLe​OD
The HighGlandeur
Posté le 22-05-2003 à 16:09:36  profilanswer
 

chrisbk a écrit :


 
etant donne qu'il pense multiplié par 0.5, je présuppose qu'il travaille sur des floats, donc ton idee me parait pas super brillante, ceci dit sans vouloir te vexer :D
 


Il n'empêche que l'idée est bonne : il suffit d'incrémenter ou de décrémenter l'exposant (selon que l'on multiplie ou que l'on divise par 2).
 
Mais pour répondre à la question première de cdr, il vaut mieux laisser la multiplication, car contrairement à ce que dit JagStang, le CPU sait diviser (par contre, la soustraction n'existe effectivement pas car le CPU se contente de faire des additions sur les nombres signés).
 
Un petit test rapide pour donner un ordre de grandeur. Sur ma machine, les instructions suivantes prennent le temps suivant :
 -   myDouble /= 2.0;           23 ns.
 -   myDouble /= 2;             86 ns.
 -   myDouble *= 0.5;            8 ns.
(instructions répétées un milliard de fois)
Même si les mesures ne sont pas très précises, elles donnent un irdre de grandeur significatif.

n°404629
chrisbk
-
Posté le 22-05-2003 à 16:11:50  profilanswer
 

encore heureux que le cpu sait diviser, on aurait pas l'air fin avec nos entiers sinon

n°404654
BifaceMcLe​OD
The HighGlandeur
Posté le 22-05-2003 à 16:19:32  profilanswer
 

chrisbk a écrit :

encore heureux que le cpu sait diviser, on aurait pas l'air fin avec nos entiers sinon  


Ce que JagStang semblait dire, c'est qu'une division se ramène à une multiplication par l'inverse du diviseur. Mathématiquement, c'est vrai, mais au niveau des instructions CPU, c'est faux.
 
Je me rends compte que je n'ai répondu qu'à une partie de la question de cdr. Il demandait si c'était plus rapide : j'ai répondu. Il demandait aussi si c'était plus précis : de ce point de vue, c'est strictement identique : la multiplication et la division par une puissance de 2 sont les seules opérations rigoureusement exactes en calcul flottant.

n°404662
chrisbk
-
Posté le 22-05-2003 à 16:23:29  profilanswer
 

BifaceMcLeOD a écrit :


Ce que JagStang semblait dire, c'est qu'une division se ramène à une multiplication par l'inverse du diviseur. Mathématiquement, c'est vrai, mais au niveau des instructions CPU, c'est faux.


 
vi, je disais juste que c'etait encore une chance que nos cpu sachent faire des divs, parce que 1/x avec x > 1 ca risque pas d'etre tres precis, en entier.  
 
 

BifaceMcLeOD a écrit :


Je me rends compte que je n'ai répondu qu'à une partie de la question de cdr. Il demandait si c'était plus rapide : j'ai répondu. Il demandait aussi si c'était plus précis : de ce point de vue, c'est strictement identique : la multiplication et la division par une puissance de 2 sont les seules opérations rigoureusement exactes en calcul flottant.


 
(0.5 est une puissance de 2 ?)
 

mood
Publicité
Posté le 22-05-2003 à 16:23:29  profilanswer
 

n°404690
Kristoph
Posté le 22-05-2003 à 16:36:22  profilanswer
 

chrisbk a ecrit :


 
vi, je disais juste que c'etait encore une chance que nos cpu sachent faire des divs, parce que 1/x avec x > 1 ca risque pas d'etre tres precis, en entier.  
 
 
 
 
(0.5 est une puissance de 2 ?)
 
 


 
Oui, 0.5 = 2^-1

n°404817
BifaceMcLe​OD
The HighGlandeur
Posté le 22-05-2003 à 17:34:07  profilanswer
 

chrisbk a écrit :


vi, je disais juste que c'etait encore une chance que nos cpu sachent faire des divs, parce que 1/x avec x > 1 ca risque pas d'etre tres precis, en entier.


Si, si, le comportement du CPU est très précis dans ce cas :D : une exception hardware. "KABOUM !" Dommage... :whistle:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Multiplier par 0.5 ou diviser par 2?

 

Sujets relatifs
[PHP] multiplier des morceaux de chaîne de caractères[ASP] fonction pour diviser l'affichage des enregistrements
[MySQL] Diviser une table en +eurs [dérive en MySQL général !][Excel] Comment diviser en deux une colonne...
Plus de sujets relatifs à : Multiplier par 0.5 ou diviser par 2?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR