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

Reply via email to