Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
#1

Ошибка в double

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

Приветствую! Недавно делая простую программу встретился с проблемой - при работе с числами типа double возникают ошибки. Пример
C++
1
2
double a(-2), b(0.1);
a += b;
По идеи a должно быть равно -1.9, но вот что получаю я:


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

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
Ну а результат виден на скриншоте.
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 04:14
Ответы с готовыми решениями:

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt;...

Ошибка: невозможно преобразовать 'double' в 'double'
Задача алгоритма, мы вводим матрицу А и В матрицу А раскладываем в LU...

Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)'
Есть такой файл complex.h #ifndef COMPLEX_H #define COMPLEX_H...

Почему мы пишем double x (double y)? а не через запятую double x,y
почему мы пишем double x (double y)? а не через запятую double x,y

5
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
06.12.2012, 04:20 #2
Цитата Сообщение от iRomul Посмотреть сообщение
cout.precision(20);
источник бед если не вдаваться вподробности IEEE754. Установи меньше и будет нормально.
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
06.12.2012, 04:22  [ТС] #3
activnaya, вся проблема в том, что мне нужно проверить число на ноль, но как мне это сделать?
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
06.12.2012, 04:30 #4
Цитата Сообщение от iRomul Посмотреть сообщение
вся проблема в том, что мне нужно проверить число на ноль, но как мне это сделать?
абсолютный ноль в числах с порядком и мантиссами не существует. Есть допустимая погрешность. Она конечно очень мала, но имеет свойство накапливания.

Добавлено через 4 минуты
Цитата Сообщение от iRomul Посмотреть сообщение
но как мне это сделать?
в c99 есть макросы для сравнения чисел с плавающей точкой. Не знаю как они реализованы, н ознаю что есть.
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
06.12.2012, 15:35  [ТС] #5
activnaya, хорошо, ну а есть какие-то способы решить мою задачу? Может как-то отрезать (округлить) часть с погрешностью? Или другой тип данных выбрать?
Хорошо, попробую поискать, спасибо!
0
Kuzia domovenok
Нарушитель
2243 / 2012 / 457
Регистрация: 25.03.2012
Сообщений: 7,088
Записей в блоге: 1
06.12.2012, 15:55 #6
Цитата Сообщение от iRomul Посмотреть сообщение
мне нужно проверить число на ноль, но как мне это сделать?
C++
1
const double eps=1e-4;
C++
1
if (n<eps && n>-eps)
C++
1
if (fabs(n)<eps)
0
06.12.2012, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 15:55

Ошибка "Невозможно преобразовать аргумент 1 из "double" в "double *"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double f(double...

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

Ошибка в преобразовании строки в double
Почему вот тут все правильно, то есть 5.5 остается 5.5: #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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