gpt4 book ai didi

c++ fmod 为 fmod(0.6,0.2) 返回 0.2

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:52 25 4
gpt4 key购买 nike

当我在 C++ 中使用 fmod(0.6,0.2) 时,它返回 0.2

我知道这是由浮点精度引起的,但现在看来我必须得到两个双倍的余数

非常感谢对此类问题的任何解决方案

最佳答案

数学值 0.60.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.10.01)。

关于c++ fmod 为 fmod(0.6,0.2) 返回 0.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com