Усечение чисел с плавающей запятой до int на x86 и x86_64 имеет разную ошибку округленияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Усечение чисел с плавающей запятой до int на x86 и x86_64 имеет разную ошибку округления

Сообщение Anonymous »

Я наткнулся на неудачный модульный тест, который включает преобразование чисел типа 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»