You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For values close to — but just below — pi, the result of cos is quite jittery and significantly less accurate than values just above pi. I actually don't understand how the latter are so accurate; it would be nice if the former could be so accurate as well. But the real problem is that the values just below pi actually exceed the bounds [-1,1] that one expects for cos. This causes me various DomainErrors down the line in tests that pass with Julia's built-in float types.
Looking at the code, it seems like this line is the relevant path. And from that I find very similar behavior for sin just below (but not above) pi/2. I wonder if more branches with qrtrpi and threeqrtrpi (using corresponding symmetries) would be better for these cases.
T = Double64
x =LinRange(T(π)-T(5e-16), T(π)+T(5e-16), 10_000)
y =cos.(x)
The text was updated successfully, but these errors were encountered:
@JeffreySarnoff I just installed main in a fresh project and got essentially the same result:
For reference, here's the complete reproducer for the plot above:
using Pkg
Pkg.activate(; temp=true)
Pkg.add(url="https://github.com/JuliaMath/DoubleFloats.jl#main")
Pkg.add("PythonPlot")
using PythonPlot
using DoubleFloats
T = Double64
x =LinRange(T(π)-T(5e-16), T(π)+T(5e-16), 10_000)
y =cos.(x)
plot(x.-pi, y.+1)
axhline(0, c="black")
xlabel(raw"$\theta - \pi$")
ylabel(raw"$\cos\theta + 1$")
For values close to — but just below — pi, the result of
cos
is quite jittery and significantly less accurate than values just above pi. I actually don't understand how the latter are so accurate; it would be nice if the former could be so accurate as well. But the real problem is that the values just below pi actually exceed the bounds [-1,1] that one expects forcos
. This causes me variousDomainError
s down the line in tests that pass with Julia's built-in float types.Looking at the code, it seems like this line is the relevant path. And from that I find very similar behavior for
sin
just below (but not above) pi/2. I wonder if more branches withqrtrpi
andthreeqrtrpi
(using corresponding symmetries) would be better for these cases.The text was updated successfully, but these errors were encountered: