gpt4 book ai didi

c++ - 将 float 与特定 NAN 值进行比较的最正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:00 24 4
gpt4 key购买 nike

NaN 可能有许多不同的二进制表示形式,这些表示形式通常可用于提供更多信息,例如导致 NaN 的原因。格式为 x111 1111 1xxx xxxx xxxx xxxx xxxx xxxx 的任何 IEEE 32 位 float 都是 NaN。此外,2 个 NaN(可能具有不同的二进制值)之间的任何比较都评估为 false。

所以给定两个 float :

float a = NaN1;
float b = NaN2;

两者都是 NaN,但上面的 x 位可能有不同的值,比较它们的二进制内容的最正确方法是什么(即检查它们是否是相同的类型 的 NaN)?

对我来说最明显的方法是执行 C 风格的转换,例如:*(uint32_t*)&a == *(uint32_t*)&b 但是,不保证 float 是 32 位。

最佳答案

我想第二个最明显的是使用 memcmp(),这是逐位比较两个内存块的标准函数:

const bool equal = memcmp(&a, &b, sizeof a) == 0;

此外,正如评论中所建议的,验证大小是否相同是个好主意:

const bool equal = (sizeof a == sizeof b) && (memcmp(&a, &b, sizeof a) == 0);

我不确定使用 static_assert() 是否成功,但我也不是 C++11 专家。

关于c++ - 将 float 与特定 NAN 值进行比较的最正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26136421/

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