Я наткнулся на неудачный модульный тест, который включает преобразование чисел типа double в целые числа.
Фактическое число, которое преобразуется, составляет 1,234 * 1000., и в основном код сводится к следующему:
#include
#include
int64_t deltatime(double numSeconds) {
return (int64_t) (numSeconds * 1000.0);
}
int main() {
double s = 1.234;
int64_t ms = deltatime(s);
std::cout (который может быть представлен точно), всегда должен давать мне 1233,9999..., и приведение этого значения к int64_t на самом деле будет 1233 (а не наивно ожидаемым 1234 ).
Но почему-почему я получаю 1234 на x86-64 (без указания каких-либо параметров округления для компилятора)?
Правильно ли просто добавить 0,5 к сумме (перед приведением к int64_t)?
int64_t deltatime(double numSeconds) {
return (int64_t) (numSeconds * 1000.0 + 0.5);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ding-error
Усечение чисел с плавающей запятой до int на x86 и x86_64 имеет разную ошибку округления ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Усечение чисел с плавающей запятой до int на x86 и x86_64 имеет разную ошибку округления
Anonymous » » в форуме C++ - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Усечение чисел с плавающей запятой до int на x86 и x86_64 имеет разную ошибку округления
Anonymous » » в форуме C++ - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как преобразовать список[int, int, int] в кортеж[int, int, int], а не в кортеж[int, ...]
Anonymous » » в форуме Python - 0 Ответы
- 290 Просмотры
-
Последнее сообщение Anonymous
-