Skip to content

Minor tweaks for a small gain in configure safety - #783

Merged
OlivierHnt merged 2 commits into
JuliaIntervals:masterfrom
timholy:teh/config
Oct 15, 2026
Merged

OlivierHnt merged 2 commits into
JuliaIntervals:masterfrom
timholy:teh/config

Conversation

@timholy

@timholy timholy commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

As promised, here is the result of an audit on IntervalArithmetic.configure. The bottom line is that there appears to be no substantive problem: the design plays well with Julia's invalidation, and it's difficult to trigger surprising behavior.

This has two small commits:

  • the first is a small change to the documentation, giving a little more context about configure so that users know what to expect
  • the second makes the result of @generated bareinterval(::Type{T}, ::AbstractIrrational) independent of rounding mode, so that the constant is correct for all. This is a tough call, but I think this is probably the best choice: the compiled result doesn't store backedges to the generator, and it's the generator that computes the BigFloat value of the constant and then rounds it, the values were not updated for different rounding modes. So the safe thing to do is return the most conservative answer accurate for all rounding modes, regardless of the value of the setting at the time the function was compiled. The one and only behavior change I know of is for bareinterval with rounding mode :none.

This sequence shows what happens on master:

julia> using IntervalArithmetic

julia> IntervalArithmetic.configure(; rounding=:none)
Configuration options:
  - bound type: Float64
  - flavor: set_based
  - interval rounding: none
  - power mode: fast
  - matrix multiplication mode: fast
  - number of threads for `:fast` matrix multiplication mode: 11

julia> iv = bareinterval(BigFloat, ℯ);

julia> iv.lo
2.718281828459045235360287471352662497757247093699959574966967627724076630353555

julia> iv.hi
2.718281828459045235360287471352662497757247093699959574966967627724076630353555

And here's what happens with the second commit (i.e., an interval that's safe regardless of the instantaneous value of the rounding mode):

julia> using IntervalArithmetic

julia> IntervalArithmetic.configure(; rounding=:none)
Configuration options:
  - bound type: Float64
  - flavor: set_based
  - interval rounding: none
  - power mode: fast
  - matrix multiplication mode: fast
  - number of threads for `:fast` matrix multiplication mode: 11

julia> iv = bareinterval(BigFloat, ℯ);

julia> iv.lo
2.71828182845904523536028747135266249775724709369995957496696762772407663035352

julia> iv.hi
2.718281828459045235360287471352662497757247093699959574966967627724076630353555

There's a genuine choice to be made about the second commit; if you don't like it, I can strip it out.

The configuration manual now states that a new configuration applies
only to code that starts running after `configure` returns to the REPL
(top level), with `Base.invokelatest` as the way to reach it from the
same function. It also states that each change invalidates compiled
methods.
The enclosures of `ℯ` and `φ` are computed with
`IntervalRounding{:correct}` explicitly instead of through interval
arithmetic that consults `default_rounding()`. This keeps the constants
rigorous under `configure(rounding = :none)`, where
`bareinterval(BigFloat, ℯ)` and `bareinterval(BigFloat, φ)` were thin.
It also removes the configuration dependence from the generator of
`bareinterval(::Type{T}, ::AbstractIrrational)`, whose result is cached
at first generation and is not tracked by method invalidation.

Results under `:correct` and `:ulp` are unchanged.

Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master e24824d... master / e24824d...
BigFloat MPFI/basics/* 21.7 ± 3.5 μs 21.7 ± 3.5 μs 1 ± 0.23
BigFloat MPFI/basics/+ 12.6 ± 3.6 μs 12.6 ± 3.6 μs 0.997 ± 0.4
BigFloat MPFI/basics/- 14.4 ± 3.5 μs 13.8 ± 3.5 μs 1.04 ± 0.37
BigFloat MPFI/basics// 21.2 ± 4 μs 21.1 ± 3.9 μs 1.01 ± 0.27
BigFloat MPFI/basics/abs 9.97 ± 3.3 μs 9.76 ± 3.4 μs 1.02 ± 0.49
BigFloat MPFI/basics/acos 0.675 ± 0.01 ms 0.675 ± 0.0099 ms 1 ± 0.021
BigFloat MPFI/basics/asin 0.664 ± 0.012 ms 0.664 ± 0.012 ms 1 ± 0.026
BigFloat MPFI/basics/atan 2.1 ± 0.0074 ms 2.1 ± 0.0072 ms 0.998 ± 0.0049
BigFloat MPFI/basics/cos 0.241 ± 0.0092 ms 0.241 ± 0.0092 ms 1 ± 0.054
BigFloat MPFI/basics/cosh 0.432 ± 0.012 ms 0.431 ± 0.012 ms 1 ± 0.04
BigFloat MPFI/basics/exp 0.506 ± 0.01 ms 0.505 ± 0.01 ms 1 ± 0.029
BigFloat MPFI/basics/inv 17.3 ± 3.3 μs 17.4 ± 3.4 μs 0.996 ± 0.27
BigFloat MPFI/basics/log 0.469 ± 0.011 ms 0.47 ± 0.01 ms 0.999 ± 0.033
BigFloat MPFI/basics/sin 0.343 ± 0.011 ms 0.343 ± 0.01 ms 0.999 ± 0.044
BigFloat MPFI/basics/sinh 0.574 ± 0.01 ms 0.574 ± 0.011 ms 0.999 ± 0.026
BigFloat MPFI/basics/sqrt 23 ± 3.8 μs 22.9 ± 3.5 μs 1.01 ± 0.23
BigFloat MPFI/basics/tan 0.275 ± 0.0099 ms 0.275 ± 0.0099 ms 0.999 ± 0.051
BigFloat MPFI/basics/tanh 0.587 ± 0.011 ms 0.587 ± 0.01 ms 1 ± 0.025
BigFloat bareinterval/basics/* 0.0402 ± 0.0026 ms 0.0401 ± 0.0027 ms 1 ± 0.093
BigFloat bareinterval/basics/+ 21.6 ± 3.4 μs 21.6 ± 3.4 μs 1 ± 0.22
BigFloat bareinterval/basics/- 22.4 ± 3.4 μs 22.5 ± 3.6 μs 0.996 ± 0.22
BigFloat bareinterval/basics// 19.3 ± 5.1 μs 19.7 ± 5.1 μs 0.979 ± 0.36
BigFloat bareinterval/basics/abs 15.3 ± 3.2 μs 15.4 ± 3.3 μs 0.995 ± 0.3
BigFloat bareinterval/basics/acos 0.711 ± 0.014 ms 0.711 ± 0.014 ms 1 ± 0.027
BigFloat bareinterval/basics/asin 0.699 ± 0.014 ms 0.699 ± 0.014 ms 1 ± 0.029
BigFloat bareinterval/basics/atan 2.1 ± 0.0074 ms 2.1 ± 0.0071 ms 1 ± 0.0049
BigFloat bareinterval/basics/cos 0.414 ± 0.093 ms 0.413 ± 0.091 ms 1 ± 0.32
BigFloat bareinterval/basics/cosh 0.479 ± 0.012 ms 0.478 ± 0.012 ms 1 ± 0.035
BigFloat bareinterval/basics/exp 0.512 ± 0.011 ms 0.512 ± 0.011 ms 0.999 ± 0.03
BigFloat bareinterval/basics/inv 26.2 ± 3.3 μs 26.4 ± 3.3 μs 0.991 ± 0.18
BigFloat bareinterval/basics/log 0.501 ± 0.011 ms 0.503 ± 0.012 ms 0.997 ± 0.032
BigFloat bareinterval/basics/sin 0.554 ± 0.088 ms 0.552 ± 0.086 ms 1 ± 0.22
BigFloat bareinterval/basics/sinh 0.581 ± 0.012 ms 0.581 ± 0.011 ms 1 ± 0.028
BigFloat bareinterval/basics/sqrt 31.2 ± 2.4 μs 31.2 ± 2.6 μs 0.998 ± 0.11
BigFloat bareinterval/basics/tan 0.327 ± 0.06 ms 0.327 ± 0.059 ms 1 ± 0.26
BigFloat bareinterval/basics/tanh 0.595 ± 0.011 ms 0.595 ± 0.011 ms 1 ± 0.026
BigFloat interval/basics/* 0.0415 ± 0.011 ms 0.0421 ± 0.012 ms 0.986 ± 0.38
BigFloat interval/basics/+ 16.6 ± 0.37 μs 16.5 ± 0.41 μs 1.01 ± 0.034
BigFloat interval/basics/- 17.2 ± 0.35 μs 17 ± 0.29 μs 1.01 ± 0.027
BigFloat interval/basics// 20 ± 0.25 μs 20.4 ± 0.29 μs 0.983 ± 0.019
BigFloat interval/basics/abs 15.3 ± 8.2 μs 15.8 ± 8.3 μs 0.973 ± 0.73
BigFloat interval/basics/acos 0.72 ± 0.036 ms 0.706 ± 0.037 ms 1.02 ± 0.074
BigFloat interval/basics/asin 0.689 ± 0.011 ms 0.69 ± 0.011 ms 0.999 ± 0.023
BigFloat interval/basics/atan 2.1 ± 0.0084 ms 2.1 ± 0.0072 ms 0.999 ± 0.0052
BigFloat interval/basics/cos 0.331 ± 0.013 ms 0.332 ± 0.014 ms 0.998 ± 0.058
BigFloat interval/basics/cosh 0.468 ± 0.012 ms 0.467 ± 0.012 ms 1 ± 0.035
BigFloat interval/basics/exp 0.521 ± 0.0098 ms 0.521 ± 0.0096 ms 0.999 ± 0.026
BigFloat interval/basics/inv 22.2 ± 0.33 μs 21.8 ± 0.37 μs 1.02 ± 0.023
BigFloat interval/basics/log 0.499 ± 0.013 ms 0.501 ± 0.014 ms 0.996 ± 0.038
BigFloat interval/basics/sin 0.483 ± 0.015 ms 0.482 ± 0.014 ms 1 ± 0.043
BigFloat interval/basics/sinh 0.59 ± 0.011 ms 0.59 ± 0.011 ms 0.999 ± 0.025
BigFloat interval/basics/sqrt 0.0396 ± 0.00098 ms 0.0397 ± 0.001 ms 0.999 ± 0.036
BigFloat interval/basics/tan 0.28 ± 0.013 ms 0.28 ± 0.013 ms 0.999 ± 0.065
BigFloat interval/basics/tanh 0.604 ± 0.01 ms 0.604 ± 0.0099 ms 1 ± 0.023
bareinterval/basics/* 1.82 ± 0.05 μs 1.82 ± 0.05 μs 1 ± 0.039
bareinterval/basics/+ 0.481 ± 0.011 μs 0.501 ± 0.01 μs 0.96 ± 0.029
bareinterval/basics/- 0.511 ± 0.01 μs 0.501 ± 0.01 μs 1.02 ± 0.029
bareinterval/basics// 1.18 ± 0.03 μs 1.19 ± 0.03 μs 0.992 ± 0.035
bareinterval/basics/abs 0.16 ± 0.02 μs 0.16 ± 0.019 μs 1 ± 0.17
bareinterval/basics/acos 2.71 ± 0.02 μs 2.71 ± 0.02 μs 1 ± 0.01
bareinterval/basics/asin 2.98 ± 0.021 μs 3 ± 0.03 μs 0.993 ± 0.012
bareinterval/basics/atan 13 ± 0.23 μs 13.3 ± 0.16 μs 0.981 ± 0.021
bareinterval/basics/cos 0.0686 ± 0.0036 ms 0.0683 ± 0.0039 ms 1 ± 0.077
bareinterval/basics/cosh 7.16 ± 0.04 μs 7.16 ± 0.04 μs 1 ± 0.0079
bareinterval/basics/exp 4.27 ± 0.051 μs 4.26 ± 0.05 μs 1 ± 0.017
bareinterval/basics/inv 0.892 ± 0.041 μs 0.912 ± 0.021 μs 0.978 ± 0.05
bareinterval/basics/log 1.93 ± 0.03 μs 1.94 ± 0.03 μs 0.995 ± 0.022
bareinterval/basics/sin 0.0673 ± 0.021 ms 0.0667 ± 0.021 ms 1.01 ± 0.44
bareinterval/basics/sinh 10.1 ± 0.051 μs 10.1 ± 0.06 μs 0.998 ± 0.0078
bareinterval/basics/sqrt 1.09 ± 0.01 μs 1.12 ± 0.02 μs 0.974 ± 0.02
bareinterval/basics/tan 0.0384 ± 0.0024 ms 0.0383 ± 0.0026 ms 1 ± 0.093
bareinterval/basics/tanh 0.305 ± 0.0081 ms 0.308 ± 0.0082 ms 0.991 ± 0.037
interval/basics/* 2.96 ± 0.061 μs 3.05 ± 0.079 μs 0.97 ± 0.032
interval/basics/+ 1.55 ± 0.05 μs 1.6 ± 0.04 μs 0.969 ± 0.039
interval/basics/- 1.58 ± 0.04 μs 1.61 ± 0.04 μs 0.981 ± 0.035
interval/basics// 2.01 ± 1.3 μs 2 ± 0.3 μs 1 ± 0.68
interval/basics/abs 0.351 ± 0.06 μs 0.35 ± 0.059 μs 1 ± 0.24
interval/basics/acos 3.33 ± 0.051 μs 3.28 ± 0.06 μs 1.02 ± 0.024
interval/basics/asin 3.55 ± 0.08 μs 3.56 ± 0.04 μs 0.997 ± 0.025
interval/basics/atan 12.6 ± 0.18 μs 11.5 ± 0.17 μs 1.09 ± 0.022
interval/basics/cos 0.0509 ± 0.019 ms 0.0504 ± 0.019 ms 1.01 ± 0.54
interval/basics/cosh 8.97 ± 0.06 μs 8.93 ± 0.07 μs 1 ± 0.01
interval/basics/exp 4.79 ± 0.07 μs 4.76 ± 0.059 μs 1.01 ± 0.019
interval/basics/inv 1.4 ± 0.06 μs 1.37 ± 0.03 μs 1.02 ± 0.049
interval/basics/log 2.52 ± 0.06 μs 2.52 ± 0.059 μs 1 ± 0.034
interval/basics/sin 0.0676 ± 0.0034 ms 0.0671 ± 0.0034 ms 1.01 ± 0.072
interval/basics/sinh 10.5 ± 0.1 μs 10.5 ± 0.091 μs 0.997 ± 0.013
interval/basics/sqrt 1.58 ± 0.21 μs 1.51 ± 0.042 μs 1.05 ± 0.14
interval/basics/tan 0.0388 ± 0.0019 ms 0.0385 ± 0.0019 ms 1.01 ± 0.069
interval/basics/tanh 0.303 ± 0.013 ms 0.304 ± 0.013 ms 0.998 ± 0.06
time_to_load 0.106 ± 0.0025 s 0.106 ± 0.0001 s 1.01 ± 0.024
Memory benchmarks
master e24824d... master / e24824d...
BigFloat MPFI/basics/* 0.332 k allocs: 17.7 kB 0.332 k allocs: 17.7 kB 1
BigFloat MPFI/basics/+ 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/- 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics// 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/abs 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/acos 1.14 k allocs: 0.0407 MB 1.14 k allocs: 0.0407 MB 1
BigFloat MPFI/basics/asin 1.08 k allocs: 0.0417 MB 1.08 k allocs: 0.0417 MB 1
BigFloat MPFI/basics/atan 2.14 k allocs: 0.0543 MB 2.14 k allocs: 0.0543 MB 1
BigFloat MPFI/basics/cos 1.56 k allocs: 0.0425 MB 1.56 k allocs: 0.0425 MB 1
BigFloat MPFI/basics/cosh 0.759 k allocs: 0.0313 MB 0.759 k allocs: 0.0313 MB 1
BigFloat MPFI/basics/exp 0.902 k allocs: 0.036 MB 0.902 k allocs: 0.036 MB 1
BigFloat MPFI/basics/inv 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/log 0.407 k allocs: 20.6 kB 0.407 k allocs: 20.6 kB 1
BigFloat MPFI/basics/sin 1.91 k allocs: 0.0536 MB 1.91 k allocs: 0.0536 MB 1
BigFloat MPFI/basics/sinh 0.915 k allocs: 0.0369 MB 0.915 k allocs: 0.0369 MB 1
BigFloat MPFI/basics/sqrt 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/tan 1.65 k allocs: 0.0493 MB 1.65 k allocs: 0.0493 MB 1
BigFloat MPFI/basics/tanh 0.908 k allocs: 0.0362 MB 0.908 k allocs: 0.0362 MB 1
BigFloat bareinterval/basics/* 0.262 k allocs: 26 kB 0.262 k allocs: 26 kB 1
BigFloat bareinterval/basics/+ 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics/- 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics// 0.1 k allocs: 10.8 kB 0.1 k allocs: 10.8 kB 1
BigFloat bareinterval/basics/abs 0.199 k allocs: 20.1 kB 0.199 k allocs: 20.1 kB 1
BigFloat bareinterval/basics/acos 1.27 k allocs: 0.0692 MB 1.27 k allocs: 0.0692 MB 1
BigFloat bareinterval/basics/asin 1.17 k allocs: 0.0659 MB 1.17 k allocs: 0.0659 MB 1
BigFloat bareinterval/basics/atan 2.04 k allocs: 0.058 MB 2.04 k allocs: 0.058 MB 1
BigFloat bareinterval/basics/cos 2.45 k allocs: 0.185 MB 2.45 k allocs: 0.185 MB 1
BigFloat bareinterval/basics/cosh 1.01 k allocs: 0.0671 MB 1.01 k allocs: 0.0671 MB 1
BigFloat bareinterval/basics/exp 0.802 k allocs: 0.0397 MB 0.802 k allocs: 0.0397 MB 1
BigFloat bareinterval/basics/inv 0.198 k allocs: 20 kB 0.198 k allocs: 20 kB 1
BigFloat bareinterval/basics/log 0.616 k allocs: 0.0522 MB 0.616 k allocs: 0.0522 MB 1
BigFloat bareinterval/basics/sin 2.9 k allocs: 0.197 MB 2.9 k allocs: 0.197 MB 1
BigFloat bareinterval/basics/sinh 0.815 k allocs: 0.0407 MB 0.815 k allocs: 0.0407 MB 1
BigFloat bareinterval/basics/sqrt 0.26 k allocs: 25.8 kB 0.26 k allocs: 25.8 kB 1
BigFloat bareinterval/basics/tan 1.67 k allocs: 0.124 MB 1.67 k allocs: 0.124 MB 1
BigFloat bareinterval/basics/tanh 0.808 k allocs: 0.0399 MB 0.808 k allocs: 0.0399 MB 1
BigFloat interval/basics/* 0.263 k allocs: 26.8 kB 0.263 k allocs: 26.8 kB 1
BigFloat interval/basics/+ 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics/- 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics// 0.101 k allocs: 11.6 kB 0.101 k allocs: 11.6 kB 1
BigFloat interval/basics/abs 0.2 k allocs: 20.9 kB 0.2 k allocs: 20.9 kB 1
BigFloat interval/basics/acos 1.71 k allocs: 0.11 MB 1.71 k allocs: 0.11 MB 0.999
BigFloat interval/basics/asin 1.47 k allocs: 0.0943 MB 1.47 k allocs: 0.0946 MB 0.996
BigFloat interval/basics/atan 2.04 k allocs: 0.0593 MB 2.04 k allocs: 0.0594 MB 0.998
BigFloat interval/basics/cos 2.45 k allocs: 0.186 MB 2.45 k allocs: 0.186 MB 1
BigFloat interval/basics/cosh 1.01 k allocs: 0.0682 MB 1.01 k allocs: 0.0682 MB 1
BigFloat interval/basics/exp 0.803 k allocs: 0.0407 MB 0.803 k allocs: 0.0407 MB 1
BigFloat interval/basics/inv 0.199 k allocs: 20.8 kB 0.199 k allocs: 20.8 kB 1
BigFloat interval/basics/log 0.917 k allocs: 0.0805 MB 0.917 k allocs: 0.0805 MB 1
BigFloat interval/basics/sin 2.9 k allocs: 0.198 MB 2.9 k allocs: 0.198 MB 1
BigFloat interval/basics/sinh 0.816 k allocs: 0.0419 MB 0.816 k allocs: 0.0419 MB 0.999
BigFloat interval/basics/sqrt 0.714 k allocs: 0.0675 MB 0.714 k allocs: 0.0675 MB 1
BigFloat interval/basics/tan 1.67 k allocs: 0.125 MB 1.67 k allocs: 0.125 MB 1
BigFloat interval/basics/tanh 0.809 k allocs: 0.041 MB 0.809 k allocs: 0.0409 MB 1
bareinterval/basics/* 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/+ 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/- 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics// 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/abs 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/acos 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/asin 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/atan 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/cos 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/cosh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/exp 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/inv 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/log 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sin 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/sinh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sqrt 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/tan 0.29 k allocs: 23.1 kB 0.29 k allocs: 23.1 kB 1
bareinterval/basics/tanh 1.03 k allocs: 0.0359 MB 1.03 k allocs: 0.0359 MB 1
interval/basics/* 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/+ 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/- 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics// 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/abs 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/acos 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/asin 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/atan 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/cos 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/cosh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/exp 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/inv 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/log 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sin 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/sinh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sqrt 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/tan 0.291 k allocs: 24 kB 0.291 k allocs: 24 kB 1
interval/basics/tanh 1.03 k allocs: 0.0367 MB 1.03 k allocs: 0.0367 MB 1
time_to_load 0.2 k allocs: 11.8 kB 0.2 k allocs: 11.8 kB 1

@OlivierHnt

Copy link
Copy Markdown
Member

That seems like the right thing to do, after all interval(Float64, 1//3) encloses $1/3$ correctly no matter the rounding mode.

N.B.: the error on CI is unrelated. We have issues with Rational bounds, and the rationalize function from Base.

@OlivierHnt
OlivierHnt merged commit 56701d7 into JuliaIntervals:master Oct 15, 2026
23 of 43 checks passed
@timholy
timholy deleted the teh/config branch October 16, 2026 01:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants