Skip to content

Poor accuracy of cos just below pi with Double64 #164

@moble

Description

@moble

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)

cos_theta_Double64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions