Здравствуйте, _Vladimir_, Вы писали:
_V_>Здравствуйте, orangy, Вы писали:
O>>O>>template<typename T> int round(T value) { return int(value + 0.5); }
O>>
_V_>Здесь есть один тонкий момент, оператор преобразования (int)value,
_V_>будет реализован как загрузка value в регистр сопроцессора,
_V_>и выгрузка его в память как целое значение.
_V_>При выгрузке регистра его значение может быть преобразовано в целое
_V_>различными способами (в большую строну, меньшую или округление),
_V_>это будет зависеть от состояния флагов сопроцессора.
_V_>Вообщем, нет гарантии, что (int) все время будет возвращаеть ближайщее целое снизу.
_V_>И потом, я не видел, чтобы стандарт C++ явно указывал на то
_V_>как должен работать оператор (int).
[conv.fpint] 4.9 Floating-integral conversions
1 An rvalue of a floating point type can be converted to an rvalue of an integer type. The conversion truncates; that is, the fractional part is discarded.
так что по умолчанию происходит sign(x)*floor(abs(x))