Dear Quan Zhu On 18 Nov 98 at 15:06, you wrote: > > I was not able to post questions to the root discussion list, and I > hope you can shed some light on the following problem: > > If I run the follow fairly simple test code using root: > > { > Float_t x = 888.45; > Float_t y = 888.46; > printf("%f\n", y - x); > > Float_t r = x - (Int_t)x; > printf("%f\n", r); > } > > on Windows NT machine, I get the followng output: > 0.010010 > 0.450012 > > which is clear wrong. I didn't understand what is wrong with the result you present. As for me it is perfect one. You will get "exactly" the same with any 32-bits machine. Doesn't matter whether it is UNIX/Windows/VMS/MS DOS. > This got me ***REALLY*** worried since many > root classes use Float_t types a lot, and I only have access to > Windows NT machines. (However, if one changes the above code to > Double_t, then everything appear to be ok!) SURE, because you will double the precision of your calculations. That why the "double" was introduced. > Below you will find the result I got with SunSparc machine. root [0] Float_t x = 888.45; root [1] Float_t y = 888.46; root [2] printf("%f\n", y - x); 0.010010 The precision of the IEEE floating point representation is about 1.0e-7 . Apparently the result you got does fit that. > Any ideas ? Please, find and have a read some textbook on "Numerical calculations with computers" Hope this helps, With my best regards, Valery ================================================================= Dr. Valeri Faine (Fine) ------------------- Phone: +1 516 344 7806 Brookhaven National Laboratory FAX : +1 516 344 4206 Bldg. 510A /STAR mailto:fine@bnl.gov Upton, New York, 11973-5000 http://nicewww.cern.ch/~fine USA Dr. Valery Fine Telex : 911621 dubna su ----------- LCTA/Joint Inst.for Nuclear Res. Phone : +7 09621 6 40 80 141980 Dubna, Moscow region Fax : +7 09621 6 51 45 Russia mailto:fine@main1.jinr.dubna.su
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:40 MET