考虑以下代码,这是我实际问题的SSCCE:
#includeint roundtrip(int x) { return int(float(x)); } int main() { int a = 2147483583; int b = 2147483584; std::cout << a << " -> " << roundtrip(a) << '\n'; std::cout << b << " -> " << roundtrip(b) << '\n'; }
我的电脑(Xubuntu 12.04.3 LTS)上的输出是:
2147483583 -> 2147483520 2147483584 -> -2147483648
请注意b
往返后正数如何变为负数.这种行为是否明确规定?我原本期望int-to-float round-tripping至少能正确保存符号......
嗯,在ideone上,输出是不同的:
2147483583 -> 2147483520 2147483584 -> 2147483647
g ++团队是否在此期间修复了错误,或者两个输出都完全有效?