Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 mai 2007 à 15:33
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 mai 2007 à 16:53
Salut a tous, je viens de remarquer quelque chose d'etrange, et je voudrai savoir si quelqun a deja rencontré ce probleme, et sait d'ou cela peut venir.
voila le petit bout de code dont le resultat est assez etrange.
var
txt : string;
i, n: integer;
e: extended;
begin
txt := '';
n := 1;
for i := 1 to 30 do
begin
txt := txt + inttostr(i)+'='+FloatToStrF(1/n, ffFixed, 18, 20)+#10+#13;
n := n*10;
end;
ShowMessage(txt);
end;
je calcule les differentes valeurs de 10^-n, et jusqu'a 10^-10 ca va, ensuite les resultats sont tout bidon.
par contre, en faisant "n :extended;", tout fonctionne correctement. Il semblerait que la division par un entier donne un resultat faux...
quelqu'un a t'il deja rencontré ce probleme?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 10 mai 2007 à 16:41
Normal, puisque N vas aller de 1e+0 a 1e+29 alors comme le maximum est :
2,1e+9 pour integer, 4,3e+9 pour cardinal et 9,2e+18 pour int64
tu ne peu donc pas utiliser de type entier pour N ...
sois Single, Double ou Extended (le plus precis)
var
i : integer;
n : extended;
begin
with TStringList.Create do
try
BeginUpdate;
n := 0.1;
for i := 1 to 30 do
begin
n := n*10;
Add( format('%d = %.0e',[i, 1/n]) );
end;
finally
EndUpdate;
ShowMessage(Text);
Free;
end;
end;
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 mai 2007 à 16:18
Non je ne pense pas, un FloatToStr basique entraine la meme erreur!
je pense plus que ca vient de la division par un entier, mais je ne sais pas par quelle unité elle est effectuée, et je suppose que c'est en assembleur ...
PS: je suis sous delphi 7 .1 (=delphi 7 build 8.1)