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

Reply via email to