[math/algo] efficacité d'une formule

efficacité d'une formule [math/algo] - Algo - Programmation

Marsh Posté le 12-06-2002 à 16:27:40    

(Bon je vais "parler" en java, je présume que tt le monde comprendra?)
 
Je voulais savoir si qqun pouvait me dire ce qui serait le plus efficace entre
 

Math.floor(f/g) * g


et

f - (f%g)


 
?
(sachant que f & g sont des nbres en virgule flottante)
 
(putain si ça produit pas systematiquement le meme resultat cte honte :-), mais euh, rassurez moi, c bon hein ? :)<--- la vieille bille en math, ici...)
 
edit: c quoi ces [undefined] qd on veut faire un bloc de code là???


Message édité par greg@freestarthu le 06-12-2002 à 16:34:23
Reply

Marsh Posté le 12-06-2002 à 16:27:40   

Reply

Marsh Posté le 12-06-2002 à 16:32:31    

moi a vue de nez, je dirais que la premiere solution est la meilleure d'un point de vue resultat et temps de reponse.
Ton f%g me parait consommateur et peu precis qui plus est.
Mais bon ce n'est qu'un avis personnel.
 
 :bounce:

Reply

Marsh Posté le 12-06-2002 à 16:32:32    

bah fais le une centaine de fois voir plusieurs milliers et calcul la différence de temps
 
 
f - (f%g) devrait etre plus rapide car pas d'appel de fonction
(cf fonctions inline en C++)


---------------
Narf... [:dlr_ninja]  
Reply

Marsh Posté le 12-06-2002 à 16:33:30    

zut g encore oublié d'enlever mon masque :D


---------------
Narf... It is broken...
Reply

Marsh Posté le 12-06-2002 à 16:34:44    

Ca existe le modulo sur des nombres en virgule flottante ?

Reply

Marsh Posté le 12-06-2002 à 16:35:39    

DLR a écrit a écrit :

zut g encore oublié d'enlever mon masque :D  




 :lol:  
 
 
bon
 
un 3e avis pour trancher entre ces deux avis contradictoire?
(paske ouais les benchmarks je pourrais les faire, c vrai, mais euh. plus tard:-))

Reply

Marsh Posté le 12-06-2002 à 16:35:53    

Je@nb a écrit a écrit :

Ca existe le modulo sur des nombres en virgule flottante ?  




ben.. oui. on dirait:)

Reply

Marsh Posté le 12-06-2002 à 16:37:01    

Je@nb a écrit a écrit :

Ca existe le modulo sur des nombres en virgule flottante ?  




 
non


---------------
Narf... It is broken...
Reply

Marsh Posté le 12-06-2002 à 16:37:37    

Je@nb a écrit a écrit :

Ca existe le modulo sur des nombres en virgule flottante ?


oui, fmod() en C par exemple.

Reply

Marsh Posté le 12-06-2002 à 16:39:15    

DLR a écrit a écrit :

 
 
non  




en java ça passe sans probleme
dans la doc ils appellent ça le "remainder" et non modulo
y'a une difference?
c le reste de la division quoi, je vois pas pq ça existerait pas sur des flottants...?
enfin bon
je vais me la fermer avt de dire une connerie:)

Reply

Marsh Posté le 12-06-2002 à 16:39:15   

Reply

Marsh Posté le 12-06-2002 à 16:40:42    

c tres proche des maths la...
en principe un modulo c de N ver N, mais les informaticiens et les maths tu sais :D


---------------
Narf... It is broken...
Reply

Marsh Posté le 12-06-2002 à 16:42:20    

Si le "compilateur" est bien foutu, la deuxième solution devrait être plus rapide car elle met en scène moins de mécanismes lourds que la première.

Reply

Marsh Posté le 12-06-2002 à 16:43:59    

DLR a écrit a écrit :

en principe un modulo c de N ver N, mais les informaticiens et les maths tu sais :D


:??: je ne vois pas ce que qu'il y a de choquant à vouloir un quotient entier pour les nombres flottants ...

Reply

Marsh Posté le 12-06-2002 à 16:47:31    

DLR a écrit a écrit :

c tres proche des maths la...
en principe un modulo c de N ver N, mais les informaticiens et les maths tu sais :D  




 
non de Z vers Z plutot ?

Reply

Marsh Posté le 12-06-2002 à 16:48:26    

bon, le vainqueur d'aujourd'hui sera DLR
 
du moins en Java et sur ma machine, dans mon petit benchmark minable,
le

f - (f%g)


est environ 4x plus rapide
(mesure effectuée sur une boucle executant 10000000 fois l'operation, 2 boucles pour chaque operation)

Reply

Marsh Posté le 12-06-2002 à 16:49:05    

DLR a écrit a écrit :

c tres proche des maths la...
en principe un modulo c de N ver N, mais les informaticiens et les maths tu sais :D  




 
C'est pas un problème, le compilo fait un casting sur des entiers.

Reply

Marsh Posté le 12-06-2002 à 17:28:20    

le resultat ne sera probablement pas le meme
a cause de la limite de precision des flottants.
 
LeGreg

Reply

Marsh Posté le 12-06-2002 à 17:30:20    

legreg a écrit a écrit :

le resultat ne sera probablement pas le meme
a cause de la limite de precision des flottants.
 
LeGreg  




oui, enfin , sachant que mes données à la base sont précises au 1000e, ça devrait aller non? :o

Reply

Marsh Posté le 13-06-2002 à 11:50:16    

Du modulo sur des réels :heink:  
 
Ca me paraît douteux, voire aventureux : si ca ne plante pas, ca doit faire une approximation entière de chacun des 2 nombres avant le modulo, d'où un résultat forcément faux :non:


---------------
Dans le monde, il n'y a que 10 sortes de personnes : ceux qui savent compter en binaire et ceux qui ne savent pas
Reply

Marsh Posté le 13-06-2002 à 13:04:40    

en C tu as le fmod:
fmod(a,b)
c'est f tel qu'il existe i entier
avec a = i * b + f;
avec f et a de meme signe
et |f| < |b|
 
mais je ne sais pas comment ca fonctionne en java
 
par contre c'est clair que fmod c'est pas la meme
chose que le mod des deux flottants convertis en entiers.
 
LeGreg

Reply

Sujets relatifs:

Leave a Replay

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