我正在观看“使用 C++20 三向比较 - Jonathan Müller - Meeting C++ 2019”的演讲,其中提到了包含浮点成员的类的问题。
问题来自这样一个事实,即涉及 NaN(s) 的 IEEE 754 比较很奇怪并且不提供总排序。Talk 提供了一种解决此问题的方法,例如使用strong_order或在实现 <=> 时手动忽略 NaN 值(假设值永远不是 NaN)。
我的问题是,是否有一些库包装器可以让我说“我保证”我的浮点数永远不是 NaN ,或者会在浮点数上进行缓慢但有效的比较(因为现在订购了 NaN,所以速度较慢但更安全)。我的目标是通过使成员浮动飞船友好来避免手动实现飞船(所以我可以默认飞船)。
使用演讲中的示例:
// original class
struct Temperature{
double value;
};
struct TemperatureNoNan{
std::a_number<double> value; // I promise value will never be NaN
// Now spaceship defaulting works
};
struct TemperatureStrongO{
std::s_ordered<double> value; // I want strong ordering(2 diff NaNs are not the same)
// Now spaceship defaulting works
};