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

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

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

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

06.12.2012, 04:14. Просмотров 332. Ответов 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++
Ошибка Extra parameter in call to cos(double) C++
C++ Ошибка в коде программы. conversion from 'double' to 'int', possible loss of data, error C2018: unknown charact
C++ Ошибка с циклом While. По разному работает с double и float, хотя должен бы одинаково
C++ Ошибка с double в в проге по интегрированию ф-ции методом парабол
Ошибка в преобразовании строки в double C++
Ошибка с double C++
C++ Ошибка вывода значения 0 типа double
C++ Ошибка этапа исполнения: double free or corruption (fasttop):
Ошибка: отсутствует оператор >>,соответствующий этим операндам типы операндов: std::ostream>>const double C++
C++ Странная ошибка похожая на выход из диапазона у типа(long double)
Ошибка: double free or corruption (fasttop) C++

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

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

Добавлено через 4 минуты
Цитата Сообщение от iRomul Посмотреть сообщение
но как мне это сделать?
в c99 есть макросы для сравнения чисел с плавающей точкой. Не знаю как они реализованы, н ознаю что есть.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
06.12.2012, 15:35  [ТС]     Ошибка в double #5
activnaya, хорошо, ну а есть какие-то способы решить мою задачу? Может как-то отрезать (округлить) часть с погрешностью? Или другой тип данных выбрать?
Хорошо, попробую поискать, спасибо!
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 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
Ответ Создать тему
Опции темы

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