gpt4 book ai didi

c++ - 在 C++ 中,<、== 和 > 中的一个是否保证在 float 上为真?

转载 作者:IT老高 更新时间:2023-10-28 13:58:16 25 4
gpt4 key购买 nike

在 C++ 中,我是否可以保证,对于任何给定的 float afloat b , 一个且只有一个 a < b , a == ba > b是真的吗?

如果这在编译器和平台之间有所不同,我对 x86 上的 Visual C++ 感兴趣。

最佳答案

没有。

对于任何一个 a 来说都足够了或 b成为 NaN a < b 中的每一个, a == ba > b是假的。

如果两者都是 ab是非 NaN 则正好是 a < b 之一, a == ba > b必须是真的。

作为补充,这个 answer告诉你如何在 C++ 中获得 a NaN 值(有几个 NaN 值,可以通过检查它们的表示来区分;它们彼此不同,因为 NaN 永远不等于任何东西,)以及如何测试一个值是否为 NaN(查看变量 x 是否为 NaN 的惯用测试是 x != x ,实际上 std::isnan() 经常以这种方式实现,但有些程序员必须阅读你的代码可能会被它弄糊涂)。

然后,如果 ab是以前计算的结果,存在精度过高的问题。看到这个article在 C 中进行讨论。C99 标准通过明确规定可能和不可能出现超精度的规则解决了这个问题,但是尽管 C++ 或多或少地通过遵循 C 标准来定义 FLT_EVAL_METHOD 来继承这些规则。在 cfloat ,在实践中,C 编译器比 C++ 编译器更重视规则。例如 GCC 在使用 -std=c99 编译时实现了 C 的规则。 ,在这种情况下,您可以依赖该属性来保存,但在撰写本文时,GCC 在用作 C++ 编译器时并未实现这些规则。

关于c++ - 在 C++ 中,<、== 和 > 中的一个是否保证在 float 上为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com