Home
| Calendar
| Mail Lists
| List Archives
| Desktop SIG
| Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings Linux Cafe | Meeting Notes | Linux Links | Bling | About BLU |
On 01/14/2012 09:04 PM, Richard Pieri wrote: > On Jan 14, 2012, at 1:23 PM, markw at mohawksoft.com wrote: >> That's a HORRIBLE idea! 3 decimal places are worse that IEEE. If it just a >> home accounting package, use doubles. If it is for the banking industry >> use a financial math library. > IEEE-754 is exactly what you don't want to use. Rounding errors in floats and doubles will introduce errors into your calculations. Here's an example: > > // some code to print a floating point number to a lot of decimal places > int main() > { > double f = .37; > printf("%.20f\n", f); > } > $ gcc -O -o foo foo.c > $ ./foo > 0.36999999999999999556 > > Code snippet modified from: > http://www.theregister.co.uk/2006/08/12/floating_point_approximation/ > > As you can see, the internal representation of the number is not the number. It's close, so very close, but "close" is the same as "wrong" in accounting. > Actually, most spreadsheets use doubles. Back when I was at Cadmus in the early 1980s there was one of our third party spreadsheet vendors who used floats, and we strongly advised against it. But, as you point out above and I pointed out in parallel floats are approximations, but they are used in some financial calculations. Note that the maximum precision of a double is 15 decimal places so the 556 is simply garbage. Also, nearly all microprocessor chips implement IEEE (format in my previous email). Some vendors (like Digital VAX) had different formats. But all floating point numbers are stored in binary with an exponent and mantissa. -- Jerry Feldman <gaf at blu.org> Boston Linux and Unix PGP key id:3BC1EB90 PGP Key fingerprint: 49E2 C52A FC5A A31F 8D66 C0AF 7CEA 30FC 3BC1 EB90
BLU is a member of BostonUserGroups | |
We also thank MIT for the use of their facilities. |