Boston Linux & Unix (BLU) 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

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss] Financial database / balance?



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
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org