c fmod为fmod(0.6,0.2)返回0.2
作者:互联网
当我在c中使用fmod(0.6,0.2)时返回0.2
我知道这是由浮点精度引起的,但此刻看来我得剩下两倍的余数
非常感谢您为此类问题提供的任何解决方案
解决方法:
数学值0.6和0.2不能精确地用二进制浮点表示.
该演示程序将向您显示发生了什么:
#include <iostream>
#include <iomanip>
#include <cmath>
int main() {
const double x = 0.6;
const double y = 0.2;
std::cout << std::setprecision(60)
<< "x = " << x << "\n"
<< "y = " << y << "\n"
<< "fmod(x, y) = " << fmod(x, y) << "\n";
}
我的系统(很可能是您的系统)上的输出是:
x = 0.59999999999999997779553950749686919152736663818359375
y = 0.200000000000000011102230246251565404236316680908203125
fmod(x, y) = 0.1999999999999999555910790149937383830547332763671875
给定您传递给它的参数,fmod()返回的结果是正确的.
如果您需要其他结果(我想您期望的是0.0),则必须执行其他操作.有很多可能性.您可以检查结果是否与0.2相差很小,或者可以使用整数算术进行计算(例如,如果要处理的所有数字均为0.1或0.01的倍数).
标签:c,floating-accuracy,fmod 来源: https://codeday.me/bug/20191011/1894299.html