gpt4 book ai didi

c++ - std::fmod(4.2, 0.12) 等于 epsilon * 1.5

转载 作者:行者123 更新时间:2023-12-01 14:30:40 24 4
gpt4 key购买 nike

auto a{ 4.2 };
auto b{ 0.12 };
auto result = std::fmod(a, b);
if(result <= std::numeric_limits<double>::epsilon())
result = 0; // <-- This line isn't triggered

在这个例子中,4.2 实际上等于 4.2000000000000002由于double不精确。

请注意 4.2/0.12 = 35。

我希望输出等于 std::numeric_limits<double>::epsilon() .相反,结果等于 1.5 * std::numeric_limits<double>::epsilon() .

这个 1.5 倍数从何而来?

最佳答案

std::fmod 的结果可能被期望精确到 ULP 左右,但机器 epsilon 是 1 的 ULP,而不是任何给定操作的结果。

关于c++ - std::fmod(4.2, 0.12) 等于 epsilon * 1.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63498383/

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