From: Josef 'Jupp' Schugt Date: 2003-06-25T19:45:09+09:00 Subject: Re: Decimal builtin? Hi! * Holden Glova; 2003-06-24, 13:55 UTC: > I am curious what people use to represent decimals when with no > rounding error? The answer to your question is 355/113 (^_^) Suppose you want to multiply a and b where a = 2.718281828 b = 3.141592654 a and b can be written in this way: a = 2.718281828 = 2718281828 * 1E-9 b = 3.141592654 = 3141592654 * 1E-9 Multiplication is done in that way: a * b = 2.718281828 * 3.141592654 = 2718281828 * 3141592654 * 1E-18 = 8539734222346491512 * 1E-18 = 8.539734222346491512 Any computation that involves decimals can be done in that way - it does not work for PI or 1/3 but that's a different story. When manually doing multiplications you actually use the above scheme: 2718281828 * 3141592654 (*) 8154845484 2718281828 10873127312 2718281828 13591409140 24464536452 5436563656 16309690968 13591409140 10873127312 ------------------- 8539734222346491512 (*) Actually the decimal points are present but they don't fit into this ASCII art. After the multiplication you count the digits that follow each decimal point and add them. This gives the position where to put it in the result. If you want a more detailed documentation on that kind of arithmetics all you have to do is finding a good FORTH tutorial. (^_^) 355.0/113.0 = 3.141592654 When it comes to divisions the problem is slightly more involved. If a computer does computations that need to be precise to a certain *base 10* number of digits they *must* be integer computations. Why that? Because there are decimal numbers with a finite number of digits that cannot correctly be represented as a binary number with a finite number of digits. Proof: ruby -e 'puts 0.1 * 0.1 - 0.01' 1.734723476e-18 Value may differ from platform to platform (especially if it preceeds IEEE 754). Gis, Josef 'Jupp' Schugt