That makes me ask the question Why would I use REAL for anything?? Thank you
On 23 Jun 2004 at 11:33, Alan Wolfe wrote: > Hey Victor. > > Double has 2 times the amount of accuracy as Real does because its twice the > size in memory. > > This is because analog floating point numbers are being stored in a binary > computer. > > Check out this oversimplified example :P > > if you only had 2 bits to store the number to the right of a decimal point, > thats only 4 combinations so youd have: > 0 > 0.25 > 0.5 > 0.75 > > so if you made a variable of that type and tried to set it to 0.14, it would > have to set it to 0.25 since that was the closest match that it can store. > > if you had 3 bits, it doubles the number of combinations to 8 so you would > have: > 0 > 0.125 > 0.25 > 0.375 > 0.5 > 0.625 > 0.75 > 0.875 > > so now if you had a variable of that type and you tried to store 0.14, it > would really store 0.125 since that was the closest match you can store. > > if you had 4 bits, the number of combinations go up to 16, with 5 bits it > becomes 32 combinations and so on. > > the more bits you have, the more accurate the number you can store is, but > it can never be infinitely accurate. > > Thats why double gives a more precise calculation while real gives an > incorect one, cause double has twice the number of bits and squared the > amount of accuracy as real does. > > > ----- Original Message ----- > From: "Victor Timmons" <[EMAIL PROTECTED]> > To: "RBASE-L Mailing List" <[EMAIL PROTECTED]> > Sent: Wednesday, June 23, 2004 11:08 AM > Subject: [RBASE-L] - Rounding REAL vs DOUBLE > > > > I am doing a very simple formula that does some rounding. > > > > R>SET VAR vUpdateAmount REAL = .01 > > R>SET VAR vBookListPrice CURRENCY = 3.50 > > R>SET VAR vBookListPrice2 DOUBLE = NULL > > R>SET VAR vBookListPrice2 = .vBookListPrice > > R>SET VAR vBookListPrice2 = ((.vBookListPrice2 * > > .vUpdateAmount)+.vBookListPrice2) > > R>SHO VAR vBookListPrice2 > > 3.5399999921769 > > R>SET VAR vBookListPrice2 = (ROUND(.vBookListPrice2,2)) > > R>SHO VAR vBookListPrice2 > > 3.53 > > > > If I change vUpdateAmount to a DOUBLE I get the correct results 3.54 > > Why is that?? Isnt .01 = .01 wheather is a REAL or a DOUBLE?? Could > > someone run this a let me know if they get the same results? > > > > R>SET VAR vUpdateAmount DOUBLE = .01 > > R>SET VAR vBookListPrice CURRENCY = 3.50 > > R>SET VAR vBookListPrice2 DOUBLE = NULL > > R>SET VAR vBookListPrice2 = .vBookListPrice > > R>SET VAR vBookListPrice2 = ((.vBookListPrice2 * > > .vUpdateAmount)+.vBookListPrice2) > > R>SHO VAR vBookListPrice2 > > 3.535 > > R>SET VAR vBookListPrice2 = (ROUND(.vBookListPrice2,2)) > > R>SHO VAR vBookListPrice2 > > 3.54 > > > > > > > > > > Victor Timmons > > Tiz's Door Sales, Inc > > 425-258-2391 > > > > Victor Timmons Tiz's Door Sales, Inc 425-258-2391

