负零总是等于零

时间:2017-03-29 07:23:32

标签: c++ floating-point rounding

我有一个C ++代码,我有时会得到非常小的双数,并且在舍入后它们变为+0-0。是否保证-0在比较中总是表现为正常零?例如,请参阅以下代码:

#include <iostream>
#include <cmath>

int main() {

    double accum = 0;
    for (int step = 0; step < 32; ++step) {
        double result = .1 * step - accum;
        accum += .1;

        result = round(result * 1e8) * 1e-8;

        std::cout << result << " ";
        if (result < 0) {
            std::cout << "< 0";
        }
        else if (result == 0) {
            std::cout << "== 0";
        }
        else {
            std::cout << "> 0";
        }
        std::cout << "\n";
    }
    return 0;
}

如果我在线投放,则始终显示-0等于0 here

问题是,它是否可以在任何计算机上保证这样?

0 个答案:

没有答案