http://qs1969.pair.com?node_id=781317


in reply to perl floating number addition

Rule of Thumb:

To calculate dollars "accurately" with 2 decimal places, you need
to calculate right from the beginning in cents as integers!

So just calculate with integers in the desired accuracy and shift the decimal point afterwards²!

Background:

Floats are not accurate with decimal fractions because the computer "has only two fingers".

Experiment

Just try to express 1/3 accurately in decimal system!

And now imagine you're an alien with 3 fingers 4 and you have only computers that calculate in decimal fractions¹... wouldn't this annoy you, too?

Conclusion

Humans have too many fingers! Downsizing³ to octal system would do it...

Cheers Rolf

Footnotes:

  • (¹) I have a faint memory of processors with special modes allowing to calculate in decimal system... was it 6502 or 68000? Must be the latter ...

    ... indeed "Although the 68000 has a 16-bit data bus... internally it can operate on ... 4-bit binary coded decimal (BCD), ..."

  • (²) The shift must be a string operation. Dividing by 100 reintroduces the problem with floats!

  • (³) added some images like of human reengineering. (... another - though bloody -rule of thumb ;-)

  • (4) in a ternary system 0.1 exactly represents 1/3 in decimal.