Henry Rich wrote:
>
>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of John Randall
>> Sent: Monday, March 27, 2006 4:16 PM
>> To: Beta forum
>> Subject: Re: [Jbeta] x: 4 * !19
>>
>> Henry:
>>
>> a=:!19
>> 3!:0 a
>> 8 NB. floating point
>> b=:!x:19
>> 3!:0 b
>> 64 NB. extended integer
>>
>> So in principle x: 4*a is rational, not an integer.
>
> I don't see how this follows. 4*a is a floating-point number
> which is exactly equal to 486580401635328000. When I convert
> that to exact, I could see that it might become a fraction
> equal to 486580401635328000, or it could become the integer
> 486580401635328000.
> Here it becomes a fraction that has some other value, which
> I don't understand.
>
(I am on a 32-bit machine. Things may be different for 64 bits.)
I don't see why a should be exactly an integer. If you assume it has been
calculated in the most favorable manner, so that powers of 2 can be moved
into the characteristic, it would still have a mantissa of size 40, more
than the 23 bits allowed for IEEE 32-bit numbers, making exact
representation impossible. Whatever the details, x: !n is eventually
going to give a fraction.
This is not necessarily bad unless you are relying on the internal
representation, which is hidden as much as possible. Consider
a=:!19
b=:! x: 19
(4*a)=(4*b)
1
(4*a)=!.0(4*b)
1
x: 4*a
33437550590372456995572480375r68719476736
x: 4*b
486580401635328000
(>:4*a)=(4*a)
1
(>:4*b)=(4*b)
0
Best wishes,
John
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm