gpt4 book ai didi

c - 0/0 (NAN) 和 1/0 (INF) 的字节表示在任何 C 编译器和机器上是否相同?

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

据我所知,你可以通过这样做得到 NaNInf:

// this is no code, just IEEE-754 math
n = 0 / 0
i = 1 / 0

现在,您可以像这样检查两个变量的字节表示:

void dumpdouble(double x) {
unsigned char *p = (unsigned char *) &x;
int k;
#ifndef BIG_ENDIAN
for(k = 0; k < 8; k++) printf("%.2x", p[7-k]);
#else
for(k = 0; k < 8; k++) printf("%.2x", p[k]);
#endif
printf("\n");
}

int main(int argc, char *argv[]) {
double n = (double) 0 / (double) atoi(argv[1]);
double i = (double) 1 / (double) atoi(argv[1]);
dumpdouble(n);
dumpdouble(i);
return 0;
}

像这样启动程序:

./a.out 0

在带有 Visual C 15 for x64 的 Windows 7 上,结果是这样的:

fff8000000000000
7ff0000000000000

现在我想知道的是:

使用 64 位 double 的 0/0 保证交付 $fff8000000000000 并且使用 64 位 double 的 1/0 保证交付 $7ff0000000000000 在任何 IEEE- 754 兼容的 C 编译器和体系结构,或者是机器/编译器/任何特定的,我不能依赖那些产生上述结果的部门?

最佳答案

0/01/0 是整数除法,会导致未定义的行为,因此不提供任何保证。

C11 6.5.5p5 - The result of the / operator is the quotient from the division of the first operand by the second; the result of the % operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined.

关于c - 0/0 (NAN) 和 1/0 (INF) 的字节表示在任何 C 编译器和机器上是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57144043/

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