Рассмотрим следующий код, который представляет собой SSCCE мою актуальную проблему:
#include <iostream>
int 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-trip, по крайней мере, сохранит знак правильно...
Hm, на ideone, результат отличается:
2147483583 -> 2147483520
2147483584 -> 2147483647
Была ли команда g++ исправлена ошибка в то же время, или оба выхода идеально подходят?