Morgan Wajda-Levie on Sat, 20 Nov 1999 13:48:47 -0500 (EST) |
I know that this is not a C programming mailing list, but a lot of Linux people know C, and this is C code being written on Linux, so it's somewhat applicable. I'm writing a function in C++ that takes a floating point number and returns the number digits of precision it has. I'm doing this with the following code: int f_digits(float number) { int a; number -= int(number); if(!number) return(0); for(a = 0; int(number / pow(10, a)) != number / pow(10, a); a--) { } return(a); } As far as I can tell, the code looks like it should work. If the number has two digits of precision, it should be evenly divisible by 10^-2, or 10.01. Instead, it loops infinitely. By running it through gdb, I find that it claims that number = 0.400024414, when it should be .4. (123.4 - 123). I tried dividing this number by 10^-9 in the debugger, and I wrote everything out by hand. Somehow, it came up with the following: .400024414 / .000000001 $4 = 400024413.99999994 Why can't C++ use floating point numbers accurately? Also, for system info: I'm running Debian potato with glibc 2.1.2-10 and gcc 2.95.2-3. -- Morgan Wajda-Levie http://www.worldaxes.com/wajdalev PGP fingerprint: A353 C750 660E D8B6 5616 F4D8 7771 DD21 7BF6 221C http://www.worldaxes.com/wajdalev/public.asc for PGP key encrypted mail preferred Attachment:
pgpSuvUkY03tg.pgp
|
|