I do not understand how to work in arbitrary precision in Julia.
I encountered the problem when using a function from the Elliptic.jl package
K(1-10^-23)
returns
Inf
while for example Mathematica accurately computes a value of approx- 30.168, using 200 digits of working precision.
If my understanding is right, the BigFloat type shoud allow arbitrary precision computations in Julia.
I tried
setprecision(500)
a = BigFloat(1-10^-23)
K(a)
but still obtain Inf as a result. As a matter of fact
BigFloat(1-10^-23) == 1
returns True.
Could somebody please explain what is that I am doing wrong? Thanks a lot
You identify the source of the problem correctly: precision is lost before converting to BigFloat
.
You should convert something to BigFloat
before performing that calculation, eg make
a = 1 - BigFloat(10)^-23
or similar.
Thanks for your reply, but I did try that one too
a = 1 -BigFloat(10)^-23
and while I now noticed that indeed, a =! 1
still
K(a)
diverges.
At least now I can define the argument correctly. Could it be something to do with the function itself?
Thanks
This is probably a problem with the package? I see here that K
converts everything to Float64
.
3 Likes
As an alternative, the DoubleFloats
package exports the ellipk
function, but it seems to give a different answer than Mathematica:
julia> using DoubleFloats; ellipk(1-Double64(10)^(-23))
27.866022930551416
2 Likes
This precision loss appears to be a known issue with the package, but it has not been addressed in two-and-a-half years.
1 Like
julia> using ArbNumerics
julia> setextrabits(64); setprecision(ArbFloat, bits=256);
julia> x = 1 - ArbFloat(10)^(-23)
0.99999999999999999999999
julia> elliptic_k(x)
27.866022930551415985041433136843867902103629991741788896439319076571988943551
3 Likes
Nice! This should be the one then.
Also, @StarecZosima could you kindly check whether your Mathematica is doing something strange? Mine gives the same answer of ~27.866.
Thanks to all very much, I got it working now, good to learn about these additional packages.
@EHBaozi, I inadvertendly typed 10^-25 and not 10^-23 when checking. Indeed in Mathemica
EllipticK [1-10^-23] = 27.866022930551415985
so matching what you got and Julia’s ArbNumerics.
Thanks once more