我有一个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。
问题是,它是否可以在任何计算机上保证这样?