Форум программистов, компьютерный форум CyberForum.ru

Ошибка точности - C++

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
07.10.2013, 07:21     Ошибка точности #1
Некоторая double переменная x равна 3.4. Домножив её на 1000, я получил 3400 (printf говорит, что всё верно), затем приведя её к типу int я получил (3399).. Я понимаю, точностью цифровая техника обделена, но я никогда не видел, чтобы точность терялась при приведении к int. Разве int не округляет вверх? Т.е. если бы даже было 3.9 или 4.1, то он бы дал 4?
double x = 3.4; //предположим инициализация была такая
C++
1
printf("%e\n%e\n%d\n", x, x * 1000, int(x * 1000));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 07:21     Ошибка точности
Посмотрите здесь:

C++ Вычисление машинной точности
Точности вычислений double C++
C++ Не точности вычисления C++
потеря точности при масштабировании C++
Потеря точности у double C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
07.10.2013, 08:09     Ошибка точности #2
И ?
Миниатюры
Ошибка точности  
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
07.10.2013, 08:15  [ТС]     Ошибка точности #3
Тогда вопрос ещё лучше, почему 3.3999 может выдавать только у меня? Пытался скомпилить и cl, и mingw, ответ такой же
newbie666
Заблокирован
07.10.2013, 08:24     Ошибка точности #4
Цитата Сообщение от nexen Посмотреть сообщение
Тогда вопрос ещё лучше, почему 3.3999 может выдавать только у меня?
Смени процессор ))))))))))))
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
07.10.2013, 09:16     Ошибка точности #5
Цитата Сообщение от nexen Посмотреть сообщение
Разве int не округляет вверх?
Нет. (int) округляет именно вниз.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
07.10.2013, 09:20  [ТС]     Ошибка точности #6
Байт, иначе говоря, отбрасывает дробную часть? Ладно, даже если так, но x * 1000 в printf вывело, как 3400, да и обычно при умножении погрешность идет в +1E-400, а не -1E-400
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 09:32     Ошибка точности
Еще ссылки по теме:

C++ Вычисление точности числа
Вычисления до заданной точности C++
Арифметика неограниченной точности C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
07.10.2013, 09:32     Ошибка точности #7
Цитата Сообщение от nexen Посмотреть сообщение
даже если так, но x * 1000 в printf вывело, как 3400,
А вот форматированный вывод (printf) округляет как положено. Часто этим пользуются для получения правильного округления.
C
1
2
sprintf(b, "%.0f", x*1000);
n = atoi(b);
Yandex
Объявления
07.10.2013, 09:32     Ошибка точности
Ответ Создать тему
Опции темы

Текущее время: 23:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru