efficacité d'une formule [math/algo] - Algo - Programmation
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.
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++)
Marsh Posté le 12-06-2002 à 16:33:30
zut g encore oublié d'enlever mon masque
Marsh Posté le 12-06-2002 à 16:34:44
Ca existe le modulo sur des nombres en virgule flottante ?
Marsh Posté le 12-06-2002 à 16:35:39
DLR a écrit a écrit : zut g encore oublié d'enlever mon masque |
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:-))
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
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
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.
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
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
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.
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 |
je ne vois pas ce que qu'il y a de choquant à vouloir un quotient entier pour les nombres flottants ...
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 |
non de Z vers Z plutot ?
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)
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 |
C'est pas un problème, le compilo fait un casting sur des entiers.
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
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?
Marsh Posté le 13-06-2002 à 11:50:16
Du modulo sur des réels
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
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
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