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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to