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