floating point comparison
- To: mathgroup at smc.vnet.net
- Subject: [mg95220] floating point comparison
- From: "Bert Aerts (rm X)" <bert.aertsX at advalvas.beX>
- Date: Sun, 11 Jan 2009 06:37:13 -0500 (EST)
In the code shown below, the result of iterFixedPointList[Cos,0.0] in 94
iterations is equal to FixedPointList[Cos,0.0]. The while loop comparison
happens as newV - oldV != 0.0. However if the comparison is written as
newV != oldV, then the there are only 82 iterations and the result is not
the final one. Why are these 2 comparisons not equal?
Remark: machine precision numbers are best shown in 16 digits precision:
Global Mathematica definition in Edit / Preferences : Appearance /
Numbers / Formatting / Displayed Precision = 16 in Mathematica 7.0.0 x86_64
on Linux
Clear[iterFixedPointList];
iterFixedPointList[function_, initValue_] :=
Module[{i, oldV, newV, listV},
i = 1;
oldV = initValue;
newV = function[initValue];
listV = {oldV, newV};
While[newV - oldV != 0.0,
i++;
oldV = newV;
newV = function[newV];
listV = Append[listV, newV];
(*
Appending newV here already before it is tested
makes that the last 2 values in listV will be equal
*)
];
Print["Number of iterations is ", i];
listV
]