当我在 C++ 中使用 fmod(0.6,0.2) 时,它返回 0.2
我知道这是由浮点精度引起的,但现在看来我必须得到两个双倍的余数
非常感谢对此类问题的任何解决方案
最佳答案
数学值 0.6
和 0.2
无法用二进制 float 精确表示。
这个演示程序会告诉你发生了什么:
#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++ fmod 为 fmod(0.6,0.2) 返回 0.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447548/