[Ecls-list] log(complex) inaccurate for some values

Juan Jose Garcia-Ripoll jjgarcia at users.sourceforge.net
Sun Apr 13 09:01:01 UTC 2008


The following does not imply anything. I will look into this, but I
presume one needs special functions to handle the high precision case,
as in CMUCL. I also wonder how many digits of accuracy this
systematically brings in other cases.

Juanjo

# /afs/ipp/common/bin/matlab -v 2007b -nojvm

                              < M A T L A B >
                  Copyright 1984-2007 The MathWorks, Inc.
                         Version 7.5.0.338 (R2007b)
                               August 9, 2007


  To get started, type one of these: helpwin, helpdesk, or demo.
  For product information, visit www.mathworks.com.

>> format long
>> log(1.000000001e0+1e-5*1i)
ans =
      1.050000086326139e-09 + 9.999999989666666e-06i


On Fri, Apr 11, 2008 at 3:59 AM, Raymond Toy <toy.raymond at gmail.com> wrote:
> I reported this bug with clisp, but ecl has the same issue:
>
>  (log #c(1.000000001d0 1d-5)) ->
>
>  #C(1.0500000857748893d-9 9.999999989666666d-6)
>
>  But with clisp's long-float, the true answer is closer to:
>
>  (setf (long-float-digits) 256)
>
>  (log (coerce #c(1.000000001d0 1d-5) '(complex long-float))) ->
>
>  #C(1.0500000821378709167497674762372261576369237933558916554150445317294087
>  7702943L-9
>
>  9.9999999896666666683134966416887953589434016059498897741294881863894719391
>  568L-6)
>
>  CMUCL returns #C(1.0500000821378709d-9 9.999999989666666d-6)
>
>  I'm guessing here, but I suspect ecl is computing the real part as
>  log(sqrt(x^2+y^2)).  This loses accuracy if x is near 1 and y is small
>  (or vice versa).
>
>  Ray


-- 
Facultad de Fisicas, Universidad Complutense,
Ciudad Universitaria s/n Madrid 28040 (Spain)
http://juanjose.garciaripoll.googlepages.com


More information about the ecl-devel mailing list