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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

07.10.2013, 07:21. Просмотров 273. Ответов 6
Метки нет (Все метки)

Некоторая 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));
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 может выдавать только у меня?
Смени процессор ))))))))))))
Байт
Эксперт C
 Аватар для Байт
15088 / 9490 / 1394
Регистрация: 24.12.2010
Сообщений: 17,579
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     Ошибка точности
Еще ссылки по теме:

Потеря точности у double C++
C++ Вычисление точности числа
Вычисления до заданной точности C++
Ошибки точности на выводе в файл C++
Арифметика неограниченной точности C++

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

Или воспользуйтесь поиском по форуму:
Байт
Эксперт C
 Аватар для Байт
15088 / 9490 / 1394
Регистрация: 24.12.2010
Сообщений: 17,579
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     Ошибка точности
Ответ Создать тему
Опции темы

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