PpHd Le 06/05/2004 à 10:13Edité par PpHd le 06/05/2004 à 11:47 BUT:
Calculer pour x (unsigned long),
y = (unsignedLong ) ((double)(x-0.5)*0.38) ?
CONTRAINTE:
Calcul exact. Pas d'overflow.
Pas de double (La prec d'un double est plate-forme dependante).
Ma solution:
(x / 50) * 19 + ((x%50) * 19 - 25 + 50 ) / 50 - 1
D'autres solutions plus simples ?
Arrondi au plus proche ? (flemme de lire ta solution)
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
PpHd Le 06/05/2004 à 10:24 Flemme de lire l'enonce aussi.
PpHd Le 06/05/2004 à 10:46 Arrondi au plus proche de (x*0.38) - 1
PpHd Le 06/05/2004 à 11:47 Recorrige. Ca m'avance beaucoup ce que tu dis la.
PpHd Le 06/05/2004 à 12:38 Ok je me suis trompe, mais c'est pas plutot:
q = x/100*38 + (38*(x%100)+100-19)/100 - 1
?
Les deux sont équivalents.
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
En plus, je pense que si les long long sont émulés en software, la solution 32 bits est bien plus efficace (un div-mod, une multiplication, une lookup table à 50 entrées et une addition)
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
PpHd Le 07/05/2004 à 09:43 M'en fous un peu que ca soit rapide. C'est pour donner en parametre a une fonction qui prend pres de 100000 cycles sur un Athlon. Alors, je suis pas a 100 cycles pres pour calculer l'entree.
PpHd Le 12/05/2004 à 09:13 Des fonctions de calcul flottantes + d'autres trucs que je fais en bonus.