我看不懂机器epsilon算术

问题描述 投票:0回答:1

我知道结果接近于零的算术运算有时可能是非关联的。这直接来自机器 epsilon 的定义。然而,我决定用它测试另一个等式,并得到了一些意想不到的结果。

//just calculate
float epsilon_float = 1.0f;
auto counter_float = 0;
while ((epsilon_float / 2 + 1.0f) != 1.0f) {
    epsilon_float /= 2;
    counter_float += 1;
}

std::cout << (1 < 1 + epsilon_float) << std::endl;
std::cout << (1 == 1 + epsilon_float / 2) << std::endl;   
std::cout << (1 + epsilon_float > 1 + epsilon_float / 2) << std::endl;  // By definition

std::cout << (1 + epsilon_float + epsilon_float / 2 >
              1 + epsilon_float / 2 + epsilon_float) << std::endl;    // Non-associativity


std::cout << (1 + epsilon_float < 1 + epsilon_float + epsilon_float / 2)  // its true
        << std::endl;

我无法理解为什么不等式的第二部分结果大于第一部分,因为据我所知,机器 epsilon 是与 1 相加时给出非 1 结果的最小数字。但这里 eps/2 加起来大于一

floating-point computer-science numerical-methods calculation epsilon
1个回答
0
投票

机器 epsilon 是与 1 相加时给出非 1 结果的最小数字。

不完全是。

机器 epsilon 是 1 和下一个可表示数字之间的差。 参考

© www.soinside.com 2019 - 2024. All rights reserved.