【发布时间】:2019-10-19 06:26:40
【问题描述】:
1 / f * f 在数学上应该等于1。我用下面的代码测试了这个身份,但对于 f = 41.000000 和 f = 47.000000 来说不是这样。
我认为它与浮点或舍入有关,但不知道原因。 是什么导致了这个结果?
#include <stdio.h>
int main(void) {
float f;
for (f = 1; f < 50; f += 1) {
if (1 / f * f != 1)
printf("f=%f\n", f);
}
return 0;
}
【问题讨论】:
-
result was 41.000000 47.000000- 究竟是什么意思???为什么这里有两个数字?你期待什么(其他)结果?为什么不直接printf("result=%f\n", 1 / f * f);找出答案? -
更好的是:
printf("result=%.12f\n", 1 / f * f);并找出答案 -
C 浮点数不支持任意分数。请先在纸上使用除法计算,然后再乘以,您将永远不会得到那个 1。
标签: c floating-point rounding