boostorg / math

Boost.org math module
http://boost.org/libs/math
Boost Software License 1.0
312 stars 224 forks source link

Floating-Point Comparison Performance #775

Open mborland opened 2 years ago

mborland commented 2 years ago

From this write up float distance could be several times better. I can poke around when implementing constexpr std::nexttoward as that is the last outlier in ccmath from this proposal.

NAThompson commented 2 years ago

Yeah, I think getting it to work quickly with multiprecision is the tricky part.

jzmaddock commented 2 years ago

Yeah, I think getting it to work quickly with multiprecision is the tricky part.

We would need the existing implementation for all non-builtin non-IEEE floats IMO.

But it's not just those, I suspect it's much harder than that blog post suggests once you handle all the corner cases correctly. I do remember that that code was a bitch to get correct.

We should have fairly good tests though, so if Matt wants to take a shot at the faster version by all means go for it :)

NAThompson commented 2 years ago

Oh don't forget the has_denorm! The trick doesn't work if the floating point unit doesn't support denorms.

jzmaddock commented 2 years ago

Oh don't forget the has_denorm! The trick doesn't work if the floating point unit doesn't support denorms.

It's worse, behaviour can vary at runtime: https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/floating-point-operations/understanding-floating-point-operations/setting-the-ftz-and-daz-flags.html

NAThompson commented 2 years ago

eww; wouldn't that require query of the cpuid instruction on every call?