help - why is this no work?!

Jerry J jhj at jhj.com
Thu May 14 13:57:13 EDT 2009


On May 14, 2009, at 5:41 AM, Jim Bufalini wrote:

> Shao Sean wrote:
>
>> Was doing some geeking with a friend in Finland and he wrote a Perl
>> script that got the correct answer and then we discovered that Rev is
>> not getting the correct answer for the multiplication.. Where is Rev
>> getting the extra "1" from? I have written a 64-bit binary math
>> library that gets the correct answer and will need to do further
>> testing with it to see if I get the correct answers for all the  
>> tests.
>>
>>
>> Rev: 16777619 * 2166136261 = 36342608889142560
>>
>> Perl: 16777619 * 2166136261 = 36342608889142559
>
> Is it the same thing we ran into using straight math in the scripting
> competition that after 16 digits the 16th digit is rounded and you  
> get zeros
> after that? The answer is 17 digits long.

Yes. Rev appears to use IEEE double-precision binary floating point  
numbers. These are 64 bits: 52 for mantissa, 11 for exponent and 1 for  
sign. So the biggest exact integer is 2 ^ 52 - 1 which is a 16 digit  
number that starts with a 4. Any integer math in Rev that gives  
intermediate results bigger than that will not be exact. I'd give the  
exact number, but I don't have a calculator that will do it. I can get  
2 ^ 49 and then multiply by 8 (by hand), but I promised I'd leave that  
alone now.

Cheer,
Jerry J




More information about the use-livecode mailing list