gpt4 book ai didi

c - 为什么不能使用 memcmp() 函数进行浮点类型比较?

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

bool floatcmp(const float a, const float b)
{
const void *p = (void*)&a;
const void *q = (void*)&b;
if (memcmp(p, q, sizeof(float)) == 0)
return true;
return false;
}

示例代码在上面,手册页上说 memcmp(x,y)==0 并不意味着 x==y 和浮点类型通常有一个名为 NaN(“不是数字”)的值,其属性为 NaN==NaN 为假。但是我将类型更改为 void* 并且我认为编译器不知道 a 是一个 float 。

最佳答案

对于 IEEE 754 二进制 float ,有两种重要情况,其中逐位相等比较会产生与浮点相等比较不同的结果。

第一个也是最重要的是零。 IEEE 754 具有正零和负零的表示法。它们在浮点比较中比较相等,但在按位比较中不相等。

第二个是 NaN,涉及 NaN 的比较,即使与另一个相同的 NaN 相等也总是 false,但在按位比较下,两个相同的 NaN 将比较相同。

关于c - 为什么不能使用 memcmp() 函数进行浮点类型比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808445/

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