julia
ac607dc5 - exact `BigFloat` to IEEE FP conversion in pure Julia (#50691)

Commit
2 years ago
exact `BigFloat` to IEEE FP conversion in pure Julia (#50691) There's lots of code, but most of it seems like it will be useful in general. For example, I think I'll use the changes in float.jl and rounding.jl to improve the #49749 PR. The changes in float.jl could also be used to refactor float.jl to remove many magic constants. Benchmarking script: ```julia using BenchmarkTools f(::Type{T} = BigFloat, n::Int = 2000) where {T} = rand(T, n) g!(u, v) = map!(eltype(u), u, v) @btime g!(u, v) setup=(u = f(Float16); v = f();) @btime g!(u, v) setup=(u = f(Float32); v = f();) @btime g!(u, v) setup=(u = f(Float64); v = f();) ``` On master (dc064683087d017927381e): ``` 46.116 μs (0 allocations: 0 bytes) 38.842 μs (0 allocations: 0 bytes) 37.039 μs (0 allocations: 0 bytes) ``` With both this commit and #50674 applied: ``` 42.310 μs (0 allocations: 0 bytes) 42.661 μs (0 allocations: 0 bytes) 41.608 μs (0 allocations: 0 bytes) ``` So, with this benchmark at least, on an AMD Zen 2 laptop, conversion to `Float16` is faster, but there's a slowdown for `Float32` and `Float64`. Fixes #50642 (exact conversion to `Float16`) Co-authored-by: Oscar Smith <oscardssmith@gmail.com>
Author
Parents
Loading