Skip to content

Convert ArbFloat to Float32 gives wrong results #85

@inkydragon

Description

@inkydragon

When I'm trying to use ArbFloat to replace BigFloat...

julia> x = Float32(0.00024868647)
0.00024868647f0

julia> acos(x)
1.5705476f0

julia> acos(BigFloat(x)) |> Float32
1.5705477f0

julia> acos(ArbFloat(x)) |> Float32
1.5705476f0

But y=acos(x) is closed to hi=1.5705477f0

julia> x
0.00024868647f0

julia> y = acos(ArbFloat(x))
1.570547640323638925989674629263948326250377240078317

julia> lo, hi = ArbFloat(1.5705476f0), ArbFloat(1.5705477f0)
(1.570547580718994140625, 1.57054769992828369140625)

julia> (lo==Float32(y), hi==Float32(y))
(true, false)

julia> abs(lo-y) > abs(y-hi)
true

Another example:

julia> x = 1.5893255f-8
1.5893255f-8

julia> acos(x)
1.5707963f0

julia> acos(BigFloat(x)) |> Float32
1.5707964f0

julia> acos(ArbFloat(x)) |> Float32
1.5707963f0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions