[Ecls-list] log(complex) inaccurate for some values
Raymond Toy
toy.raymond at gmail.com
Mon Apr 14 00:37:19 UTC 2008
Juan Jose Garcia-Ripoll wrote:
> On Sun, Apr 13, 2008 at 4:03 PM, Raymond Toy <toy.raymond at gmail.com> wrote:
>
>> But don't use the log function to evaluate this. Use log1p(z) =
>> log(1+z). Most C libraries have a log1p function already, but if not,
>> you can just use the series formula since z is small.
>>
>
> Thanks Ray. I did not know about the log1p function. I have changed
> ECL to support and export it as a lisp function, adding a simplistic
> implementation for the platforms that do not support it (mingw32 I
> believe). Now
>
>
>
My pleasure.
Here's an outline for a one possible implementation of log1p. Very
likely not as optimized as the C version, but should work with
reasonable accuracy.
log1p(x) = 2*log1p(x/(1+sqrt(1+x)))
This makes x progressively smaller. When x is small enough, you can use
the series
log1p(x) = 2*sum((x/(2+x))^(2*k+1)/(2*k+1)) for k from 0 to inf.
This series converges quite fast, even for x as large as 1.
Hope this helps a bit,
Ray
More information about the ecl-devel
mailing list