math icon indicating copy to clipboard operation
math copied to clipboard

Floating-Point Comparison Performance

Open mborland opened this issue 2 years ago • 5 comments

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.

mborland avatar Mar 11 '22 10:03 mborland

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

NAThompson avatar Mar 11 '22 16:03 NAThompson

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 :)

jzmaddock avatar Mar 11 '22 17:03 jzmaddock

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

NAThompson avatar Mar 11 '22 18:03 NAThompson

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

jzmaddock avatar Mar 11 '22 18:03 jzmaddock

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

NAThompson avatar Mar 11 '22 20:03 NAThompson