【发布时间】:2014-01-04 23:54:39
【问题描述】:
在使用 double fmod(double x, double y) 和 y 是整数时,结果似乎总是精确。
(y 是一个整数,这里不是int。)
也许 C 不 要求 fmod() 在这些选择情况下提供准确的答案,但在我尝试过的编译器上,结果是准确的,即使 x/y 的商是不能完全表示。
- 当
y是整数时,是否需要准确的答案? - 如果没有,请提供反例。
例子:
double x = 1e10;
// x = 10000000000
printf("%.50g\n", fmod(x, 100));
// prints 0
x = 1e60;
// x = 999999999999999949387135297074018866963645011013410073083904
printf("%.50g\n", fmod(x, 100));
// prints 4
x = DBL_MAX;
// x = 179769313486231570...6184124858368
printf("%.50g\n", fmod(x, 100));
// prints 68
x = 123400000000.0 / 9999;
// x = 12341234.1234123408794403076171875
printf("%.50g %a\n", fmod(x, 100), fmod(x, 100));
// prints 34.1234123408794403076171875 0x1.10fcbf9cp+5
注意事项:
我的double 似乎符合 IEEE 754 binary64。printf() 的限制在这里没有问题,只是fmod()。
[编辑]
注意:通过“预期的确切答案”,我在问fmod() 结果和数学结果是否完全相同。
【问题讨论】:
-
这里的“精确”是什么意思?如“匹配数学结果”?
-
你是对的。抱歉,有点困
-
@OliCharlesworth 是的,“匹配数学结果”
标签: c floating-point