IntervalArithmetic.jl icon indicating copy to clipboard operation
IntervalArithmetic.jl copied to clipboard

Incorrect conversion for very small numbers

Open dpsanders opened this issue 7 years ago • 9 comments

julia> @interval "1e-400"
[0, 0]

julia> I"1e-400"
[0, 0]

dpsanders avatar Feb 26 '18 19:02 dpsanders

Note that:

julia> nextfloat(0.0)
5.0e-324

lbenet avatar Feb 26 '18 20:02 lbenet

To fix this we would have to do all parsing via BigFloat, which may be very slow.

dpsanders avatar Feb 27 '18 19:02 dpsanders

julia> x = parse(Interval{BigFloat}, "1e-400")
[0, 0]₂₅₆

There is also an error here!

dpsanders avatar Feb 27 '18 19:02 dpsanders

This now gives

parse(Float64, "1e-400", RoundDown)
ERROR: ArgumentError: cannot parse "1e-400" as Float64

dpsanders avatar May 17 '18 06:05 dpsanders

We now have

julia> parse(Interval{BigFloat}, "1e-400")
Interval(9.9999999999999993e-401, 1.0000000000000001e-400)

We should probably use the new parse with rounding that was implemented for Windows also on the other systems to avoid these problems.

dpsanders avatar May 17 '18 06:05 dpsanders

We have

julia> convert(Interval{Float64}, parse(Interval{BigFloat}, "1e-400"))
Interval(0.0, 5.0e-324)

This is correct.

dpsanders avatar May 17 '18 06:05 dpsanders

this is fixed in #522

julia> @interval "1e-400"
[0, 4.94066e-324]

julia> I"1e-400"
[0, 4.94066e-324]

lucaferranti avatar May 25 '22 13:05 lucaferranti

@lbenet how should we deal with issues like these? Should we close them when the PR is merged to 1.0-dev or when 1.0-dev is merged to master?

lucaferranti avatar May 25 '22 13:05 lucaferranti

We should probably keep this open to remember to port back that back from 1.0-dev... or if we don't, close them once 1.0-dev becomes 1.0 and is merged to master 😄

lbenet avatar May 26 '22 00:05 lbenet

Fixed in #567

Kolaru avatar Jul 24 '23 18:07 Kolaru