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
