如何解决比较两个双精度数,看看它们是否是相同的 NaN
我有两个双精度 x
和 y
,其中 y
是一个特定的 NaN 值,我想看看它们是否按位相同。也就是说,我想确定 x
是否与 y
完全相同的 NaN 值。
NaN 不能与 ==
运算符进行有用的比较,因为 NaN 永远不等于任何其他值(甚至不等于它们本身!)。
是否有比以下“按位相等”方法更好的方法(这种方法是否合法?):
bool bitwise_equal(double x,double y) {
unsigned char xbytes[sizeof(x)];
unsigned char ybytes[sizeof(y)];
memcpy(xbytes,&x,sizeof(x));
memcpy(ybytes,&y,sizeof(y));
return memcmp(xbytes,ybytes,sizeof(x)) == 0;
}
解决方法
比较两个双精度数,看它们是否是相同的 NaN
如果它们按位相同
我想确定 x 是否与 y 的 NaN 值完全相同。
直接将位模式与 memcmp()
进行比较是一种合理的方法。
C 没有详细说明 NaN 负载相同性。注意:一个实现可以用多个位模式定义“相同”。请参阅sign注意事项。
#include <math.h>
#include <stdbool.h>
#include <string.h>
bool NaN_bitwise_equal(double x,double y) {
return isnan(x) && isnan(y) && memcmp(&x,&y,sizeof x) == 0;
}
“相同的 NaN 值”有些矛盾,因为这些值在数值上没有可比性,但 NaN 负载可能是。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。