我有这个问题:
我们声称对 float 使用相等测试是不安全的,因为算术运算会引入舍入错误,这意味着两个应该相等的数字实际上并不相等。
对于这个程序,您应该选择一个数字 N,并编写一个程序来显示 1 到 1000 之间的哪个整数 x 相等 (x+1)/N = (x/N) + (1/N) 失败
#include <stdio.h>
int main () {
int x;
float N = 50;
for (x=0; x<1001; x++) {
if ((x+1)/N != (x/N) + (1/N))
{
printf("%i\n",x);
}
}
}
这是正确的吗?
谢谢。
最佳答案
你的程序是错误的。它应该以 x=1
开头,而不是 x=0
。
但除此之外,您还应该选择两个示例(一个已由程序打印,一个未由程序打印)并手动计算它们。只需笔和纸以及 IEEE 754-1985 规则。然后打印等式两边并将它们与您手工计算的结果进行比较。
关于帮助! float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666437/