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

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

Войти
Регистрация
Восстановить пароль
 
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
#1

Ошибка в double - C++

06.12.2012, 04:14. Просмотров 344. Ответов 5

Приветствую! Недавно делая простую программу встретился с проблемой - при работе с числами типа double возникают ошибки. Пример
C++
1
2
double a(-2), b(0.1);
a += b;
По идеи a должно быть равно -1.9, но вот что получаю я:
[IMG]http://s58.***********/i162/1212/95/e7a568fc4b6c.png[/IMG]

Как мне побороть такие ошибки? Вот код, если нужен:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    while (x < xend) { //x изначально равно -2
        
        if (!op) {
 
            ++op;
        
        } else {
 
            x += dx; //dx равен 0.1
 
        }
 
        if(x != 0.0)
        delta = residual(myctgx(x, e), ctg(x));
 
        cout.precision(20);
        cout.flags(ios::left);
 
        if (x == 0)     cout << "| " << setw(8) << x << " | INF" << endl;
        else            cout << "| " << setw(8) << x << " |  " << setw(12) << myctgx(x, e) << " | " << setw(12)  << ctg(x) << " | " << setw(11)  << delta << endl;
 
 
 
    } //while x < xend
Ну а результат виден на скриншоте.
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 04:14     Ошибка в double
Посмотрите здесь:

Ошибка с double - C++
Здравствуйте, есть такая проблема. Создал цикл: for(double и = 0.0; и &lt; 100000; и = и + 0.1) но как ни странно, в double число...

Ошибка в преобразовании строки в double - C++
Почему вот тут все правильно, то есть 5.5 остается 5.5: #include &lt;iostream&gt; void main( int ArgC, char *ArgV ) { char *str = new...

Ошибка в переменной типа double - C++
Не могу понять в чем проблема делаю такие вычисления #include &lt;iomanip&gt; summ5=0; summ5+=((double) 1/1035*2); ...

Ошибка вывода значения 0 типа double - C++
При выполнении этого кода при значении x=0 не выводится четкий ноль. Почему? Я так понимаю нужно проводить округление? С printf такого нет....

Ошибка: double free or corruption (fasttop) - C++
Я описываю метод diamond-square. Это метод для процедурной генерации мира (кому интересно - вот описание) Но столкнулся с проблемой. При...

Ошибка Extra parameter in call to cos(double) - C++
Помогите, пожалуйста!!! Выбивает ошибку &quot;Extra parameter in call to cos(double)&quot; в этом блоке кода: double fun2(double x,double y) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
06.12.2012, 04:20     Ошибка в double #2
Цитата Сообщение от iRomul Посмотреть сообщение
cout.precision(20);
источник бед если не вдаваться вподробности IEEE754. Установи меньше и будет нормально.
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
06.12.2012, 04:22  [ТС]     Ошибка в double #3
activnaya, вся проблема в том, что мне нужно проверить число на ноль, но как мне это сделать?
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
06.12.2012, 04:30     Ошибка в double #4
Цитата Сообщение от iRomul Посмотреть сообщение
вся проблема в том, что мне нужно проверить число на ноль, но как мне это сделать?
абсолютный ноль в числах с порядком и мантиссами не существует. Есть допустимая погрешность. Она конечно очень мала, но имеет свойство накапливания.

Добавлено через 4 минуты
Цитата Сообщение от iRomul Посмотреть сообщение
но как мне это сделать?
в c99 есть макросы для сравнения чисел с плавающей точкой. Не знаю как они реализованы, н ознаю что есть.
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
06.12.2012, 15:35  [ТС]     Ошибка в double #5
activnaya, хорошо, ну а есть какие-то способы решить мою задачу? Может как-то отрезать (округлить) часть с погрешностью? Или другой тип данных выбрать?
Хорошо, попробую поискать, спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 15:55     Ошибка в double
Еще ссылки по теме:

Ошибка с double в в проге по интегрированию ф-ции методом парабол - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip.h&gt; double integral(double a, double b, double m,...

Ошибка этапа исполнения: double free or corruption (fasttop): - C++
Доброе времени суток подскажите пожалуйста в чем может быть следующая проблема. Код который выводит программа приведен ниже. Сама...

Странная ошибка похожая на выход из диапазона у типа(long double) - C++
Добрый день! Тестирую на строке $1,234,567,890,123.99 В результате, на выходе из функции mstold получаю что-то очень похожее на...

Ошибка с циклом While. По разному работает с double и float, хотя должен бы одинаково - C++
Здравствуйте. Абсолютно не понимаю, почему double x; //--- x=0.1; while(x &lt;= 0.3) { //--- x+=0.2;


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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.12.2012, 15:55     Ошибка в double #6
Цитата Сообщение от iRomul Посмотреть сообщение
мне нужно проверить число на ноль, но как мне это сделать?
C++
1
const double eps=1e-4;
C++
1
if (n<eps && n>-eps)
C++
1
if (fabs(n)<eps)
Yandex
Объявления
06.12.2012, 15:55     Ошибка в double
Ответ Создать тему
Опции темы

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