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

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

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

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

07.10.2013, 07:21. Просмотров 287. Ответов 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));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 07:21     Ошибка точности
Посмотрите здесь:

Не точности вычисления C++ - C++
double N=1.0100000000000000; N=(N-floor(N))*10; cout<<N; Выводит: 0.10000000000000009 - что ни есть правильно (добавляет 9 в...

Точности вычислений double - C++
Вот у меня возникла проблема при подсчете ряда тейлора в заданном интервале. Проблема заключается в том, что когда я ввижу интервал и...

Потеря точности у double - C++
Салют! Ситуация следующая - есть необходимость работать с изображением, а точнее - с его градиентом/направлением градиента. Для...

Вычисление точности числа - C++
Здравствуйте, прошу вас помочь мне разобраться с такой вот задачкой: Есть такое уравнение(прикрепил). Нужно её как-то ввести и при...

Арифметика неограниченной точности - C++
Здравствуйте! Создаю класс BigInt для чисел больших int. Число разбивается на массив, где каждый его элемент - отдельный разряд входящего...

Вычисления до заданной точности - C++
Исправьте ошибку пожалуйста! #include <stdio.h> #include <math.h> #include <conio.h> int fact(int x) { if(x<=1) return 1; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
15837 / 10164 / 1522
Регистрация: 24.12.2010
Сообщений: 19,162
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++
Помогите пожалуйста!!! Есть такая задачка/ Требуется найти наибольшее а , такое что 1+а=1, кто-нибудь знает, как это можно сделать?

Потеря точности при масштабировании - C++
Доброго времени суток может кто-то подскажет алгоритм масштабирования без потери точности,пока я для этого пользуюсь типом double и...

float и double (расчет точности) - C++
Всем привет, а есть какой-нибудь алгоритм по расчету точности типов float и double а то прочитал, чтобы получить точность типа double...

Увеличение точности при подсчетах - C++
Есть полностью рабочая программа, она находит корень К из числа Х с точностью prec. Работает все хорошо, но при подсчетах с дробовыми...


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

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

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