[Jprogramming] Question about complex arithmetic in J.

Henry Rich henryhrich at gmail.com
Wed May 5 21:05:08 UTC 2021


We think you're right.  The demotion of complex to real will be removed 
in the next beta.  It was done only for o. and ^ .

Henry Rich

On 5/5/2021 12:30 AM, Imre Patyi wrote:
> Handling of complex numbers in J is at a variance with what is done in
> other languages.
>
> APL: (at https://tryapl.org/ )
>
>        1 ○ 1J1e¯100
> 0.8414709848J5.403023059E¯101
>
> Guile:
> scheme@(guile-user)> (sin 1+1d-100i)
> $1 = 0.8414709848078965+5.4030230586813975e-101i
> scheme@(guile-user)>
>
> Julia:
> julia> sin(1+1e-100im)
> 0.8414709848078965 + 5.4030230586813975e-101im
>
> Octave:
>>> format longg
>>> sin(1+1e-100i)
> ans = 0.8414709848078965 + 5.403023058681397e-101i
> Python:
>>>> import cmath
>>>> cmath.sin(1+1e-100j)
> (0.8414709848078965+5.4030230586813975e-101j)
> J: (J805)
>     1 o. 1j1e_100
> 0.841471
>     +. 1 o. 1j1e_100
> 0.841471 0
>     +. (1&o.t.i.20) p. 1j1e_100
> 0.841471 5.40302e_101
>
> There is a pretty trick to compute the derivative f'(x) of a
> complex analytic function f(x) on the real axis by using a complex
> difference quotient with an imaginary increment less than eps=2^-52:
>
> f'(x) \approx (f(x+1e-100i)-f(x-1e-100i))/2e-100i
>
> This method can be surprisingly accurate.  Here is an example in Octave.
>
>>> D=@(f)@(x)(f(x+1e-100i)-f(x-1e-100i))/2e-100i ;
>>> f=D(@sin) ;
>>> x=linspace(-10,10,1e6) ; norm(f(x)-cos(x),"inf")
> ans =    1.1102e-16
>
> Can you tell me why J does not do the same thing with complex arithmetic
> as almost any other language (including surprisingly APL)?
>
> Yours sincerely,
> Imre Patyi
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm


-- 
This email has been checked for viruses by AVG.
https://www.avg.com



More information about the Programming mailing list