Raul Miller wrote:
> On 4/10/07, John Randall <[EMAIL PROTECTED]> wrote:
>> NB. smallest positive
>> value 1 1 0
>> 2.22507e_308
>
> You did not consider denormalized numbers
> _2{-:^:a: 1
> 4.94066e_324
>
You're right: my value function assumes normalization.
>> NB. largest positive
>> value 1,2046,#. 52#1
>> 1.79769e308
>
> That's what I got, too.
>
>> NB. largest less than 1
>> 0j20": value 1 1022,#. 52#1
>> 0.99999999999999988898
>
> I got a different answer
> 0j20":_2{unq]1--:^:a: 1
> 0.99999999999999989000
>
> But when I execute your expression I get yet another answer:
> value 1 1022,#. 52#1
> 0.5
>
This is a difference between 32-bit and 64-bit J: #. 52 #1 is a valid
64-bit integer but not a valid 32-bit integer. The result I quoted was
done with J64: I get the same incorrect value in J32.
What I am trying to get at is the binary fraction .1111....1111 where
there are 53 1's. Unless I am misunderstanding the IEEE 754 standard,
this is the largest double not greater than 1.
Doing calculations rather than working with bit patterns may introduce
roundoff error. I was too lazy to manipulate the bits directly.
Best wishes,
John
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm