For readers following along:

IEEE 754 is a decent search term.

Or, at least, it is for me - Google apparently customizes search
results so I cannot know for sure that they give good, relevant
results for everyone searching on that phrase (nor can I be sure
whether anyone I care about will get different results from
me).http://steve.hollasch.net/cgindex/coding/ieeefloat.html

Here are my top four hits when I search for IEEE 754 today:

http://en.wikipedia.org/wiki/IEEE_floating_point
http://grouper.ieee.org/groups/754/
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
http://babbage.cs.qc.cuny.edu/IEEE-754/

But the short form is: IEEE 754 splits the representation of a number
into a sign (+1 or _1 -- one bit), an exponent and a mantissa.  There
are actually several IEEE 754 representations, and current J
implementations use the 64 bit representation.  The 64 bit
representation uses 52 bits to represent the mantissa (a number
between 1 and 2, or equal to 1), and and the remaining 11 bits
represent the exponent (a power of 2).  In operation we act as though
these elements are multiplied together.

Obviously, there are some exceptions to the above summary.  Without
any exceptions this mechanism could not represent 0.  So the lowest
and the highest exponents get treated specially, which is where we get
J's inconsistent numbers (_ __ _.).

Rather than describe the details of what's going on in deeper detail,
here, I'll let you read other materials.

FYI,

-- 
Raul

On Thu, Feb 28, 2013 at 6:11 PM, km <[email protected]> wrote:
> I remember that comparisons with 0 are exact
>
>     0 = N - N + epsilon
>  0 0 0 0 0 0 0 1 1
>
> which agrees with your first report.  No, I am unfamiliar with the IEEE 
> structure, and am surprised by these results.
>
> --Kip
>
> Sent from my iPad
>
>
> On Feb 28, 2013, at 4:21 PM, Raul Miller <[email protected]> wrote:
>
>> Are you familiar with the structure of IEEE 754 floating point numbers?
>>
>> Consider, for example:
>>
>>   epsilon=: 2^_44
>>   N=: 10^i:4
>>
>>   NB. this result reflects IEEE-754's structure
>>   *N+epsilon-N
>> 1 1 1 1 1 1 1 0 0
>>
>>   NB. this result reflects J's heuristic to deal with that structure
>>   N=N+epsilon
>> 0 0 0 0 1 1 1 1 1
>>
>> FYI,
>>
>> --
>> Raul
>>
>> On Thu, Feb 28, 2013 at 4:28 PM, km <[email protected]> wrote:
>>> Here is what I did
>>>
>>>    NB. right hand limit of a function
>>>
>>>    lim =: 1 : 0
>>> value =. u y + (2^_44)
>>> if. value <: - 2^40 do. __
>>> elseif. value >: 2^40 do. _
>>> elseif. do. value
>>> end.
>>> )
>>>
>>> It does "reasonably well" but can be fooled, for example
>>>
>>>    ] lim 2^40
>>> _
>>>
>>> Here it does better
>>>
>>>    *: lim 1000
>>> 1000000
>>>
>>>    dq =: 1 : (':'; 'y %~ (u x+y) - u x')  NB. difference quotient
>>>
>>>   2&(^&3 dq)lim 0  NB. derivative of x^3 at 2 is 12
>>> 12
>>>
>>> --Kip
>>>
>>> Sent from my iPad
>>>
>>>
>>> On Feb 28, 2013, at 7:19 AM, Raul Miller <[email protected]> wrote:
>>>
>>>> Here's a model implementation:
>>>>
>>>> lim=: (1 :0)("0)
>>>> tests=.  u   ((1e_6*1>.|y)*0.5^i.1000)+y
>>>> tests {~{.I.((1 }. 0&~:) * 2 ~:/\ ])(,2:)(*!.0)2 -/\ tests
>>>> )
>>>>
>>>> My assumptions are:
>>>>
>>>> (1) the limit in question is relatively stable (that my choices for
>>>> epsilon are adequate)
>>>>
>>>> (2) that the result of limit should be a consistent number.
>>>>
>>>> Note that (2) means that _ and __ will typically not be returned,
>>>> since they are inconsistent numbers (but, since they are inconsistent,
>>>> it's impossible to make an entirely consistent guarantee about their
>>>> treatment).
>>>>
>>>>  (1&o.%]) lim 0
>>>> 1
>>>>  % lim 0
>>>> 2.67877e306
>>>>  -@% lim 0
>>>> _2.67877e306
>>>>
>>>> For my purposes, these "e306" values are close enough to infinity to
>>>> be treated as such.
>>>>
>>>> Note also that I'm probably being a bit too aggressive with the number
>>>> of epsilon values I'm using.
>>>>
>>>> If you really want _ and __ results, you could use something like this:
>>>>
>>>> lim=: (1 :0)("0)
>>>> tests=.  u   ((1e_6*1>.|y)*0.5^i.1000)+y
>>>> 1e_3*1e3* tests {~{.I.((1 }. 0&~:) * 2 ~:/\ ])(,2:)(*!.0)2 -/\ tests
>>>> )
>>>>
>>>> However, note that this is a heuristic and its ability to force the
>>>> result to be an inconsistent infinity depends on the stability u (and
>>>> also depends on the actual limit value).  I place less faith in this
>>>> mechanism than in the ability of the user to recognize that the result
>>>> should be thought of as infinite (and if the user does not understand
>>>> what's going on well enough to make that determination it's hard to
>>>> imagine how this distinction could be useful).
>>>>
>>>> FYI,
>>>>
>>>> --
>>>> Raul
>>>>
>>>> On Wed, Feb 27, 2013 at 10:55 PM, km <[email protected]> wrote:
>>>>> Can you write an adverb lim so that
>>>>>
>>>>>   sin =: 1&o.
>>>>>
>>>>>   (sin % ])lim 0
>>>>> 1
>>>>>
>>>>>   % lim 0  NB. limit is from right
>>>>> _
>>>>>
>>>>>   -@% lim 0
>>>>> __
>>>>>
>>>>>
>>>>> Kip Murray
>>>>>
>>>>> Sent from my iPad
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to