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