在使用 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()
。
[编辑]
注意:通过“Are exact answers expected”,我问的是 fmod()
结果和数学结果是否完全相同。
最佳答案
fmod
的结果总是是准确的; y
是否为整数无关紧要。当然,如果 x
和/或 y
已经是一些实数 a
和 b
的近似值,那么 fmod(x,y)
不太可能完全等于 a mod b
。
关于c - 当 y 是整数时,fmod() 是否准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928253/