相关疑难解决方法(0)

当y是整数时,fmod()是否准确?

在使用double fmod(double x, double y)y是一个整数时,结果似乎总是精确的.

(这是y一个完全确切的数字,int在这里不是意思.)

也许C不要求 fmod()提供这些选择的情况下一个确切的答案,但我试过编译器,结果是准确的,即使当商x/y是不能准确地表示.

  1. y是整数时,是否预期确切的答案?
  2. 如果没有,请提供一个反例.

例子:

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), …
Run Code Online (Sandbox Code Playgroud)

c floating-point

9
推荐指数
2
解决办法
1258
查看次数

C++ 在计算比 b 大得多的 a 的 mod(a,b) 时,std::fmod 如何避免舍入错误

我有一个小函数来计算 mod 如下:

double mod(double a, double b){
  return a-floor(a/b)*b;
}
Run Code Online (Sandbox Code Playgroud)

mod(1e15,3) 正确返回 1,但 mod(1e16,3) 由于乘法中的数值舍入错误而返回 0。但是使用 std::fmod(1e16,3) 可以正常工作并返回 1。有谁知道他们是如何避免这个问题的?

c++ algorithm math mod

5
推荐指数
0
解决办法
122
查看次数

标签 统计

algorithm ×1

c ×1

c++ ×1

floating-point ×1

math ×1

mod ×1