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

Отнимание двух double - C++

Восстановить пароль Регистрация
 
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
26.10.2016, 01:20     Отнимание двух double #1
Решил помочь с задачей в одной теме и наткнулся на одну неведомую мне особенность: при отнимании двух double получается черт знает что. Объясните пожалуйста почему так получается или где ошибка в коде и как исправить.
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
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <locale>
#include <Windows.h>
using namespace std;
double factorial(int a)
{
    if (a == 0)
        return 1;
    else
        return a*factorial(a - 1);
}
int main()
{
    double a = 0.1;
    double b = 1;
    double n = 100;
    double h = 0.1;
    float func;
    cout << "-------------------------------------------------------\n";
    cout << "|\tY(x)\t||\tS(x)\t||Y(x)-S(x)\t|\n";
    for (double x = a; x <= b; x += h)
    {
        double sum = 0;
        func = (exp(x) + exp(-x)) / 2;
        for (int i(0); i <= n; i++)
        {
            sum += pow(x, 2*i) / factorial(2 * i);
        }
        double  f = func - sum;
        cout << "|  " << func << "\t||  " << sum << "\t|"
            << "| " << f << "\t|\n";
    }
    cout << "-------------------------------------------------------\n";
    system("pause");
    return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2785 / 1431 / 393
Регистрация: 18.10.2014
Сообщений: 2,629
26.10.2016, 01:30     Отнимание двух double #2
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
при отнимании двух double получается черт знает что
О каком именно "отнимании двух double" и о каком "черт знает что" идет речь? Потрудитесь внятно описать проблему.
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
26.10.2016, 01:38  [ТС]     Отнимание двух double #3
TheCalligrapher, при отнимании в этой строчке
C++
1
double  f = func - sum;
получается такое как на картинке в третьем столбце.
Прошу прощения за начальную формулировку вопроса)
Миниатюры
Отнимание двух double  
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
26.10.2016, 01:40  [ТС]     Отнимание двух double #4
там в коде
должно быть не
C++
1
float func
а
C++
1
double func
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2785 / 1431 / 393
Регистрация: 18.10.2014
Сообщений: 2,629
26.10.2016, 01:46     Отнимание двух double #5
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
получается такое как на картинке в третьем столбце.
В ваше третьем столбце все правильно. А что вы там ожидали увидеть? В чем проблема-то?

(Меня, кстати, удивляет, что в некоторых случаях вам таки удалось получить 0 в последнем столбце - вот где чудо!)
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
26.10.2016, 01:49  [ТС]     Отнимание двух double #6
TheCalligrapher, как тогда избежать такой формы записи?
я правильно понял, что они отнимаются, просто на экран выводятся не в такой форме как мы привыкли из за того, что много нулей в начале, а другие цифры появляются через много знаков после точки?
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2785 / 1431 / 393
Регистрация: 18.10.2014
Сообщений: 2,629
26.10.2016, 01:58     Отнимание двух double #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
как тогда избежать такой формы записи?
Включите <iomanip> и сделайте std::fixed и std::setprecision перед выводом

C++
1
2
std::cout << std::fixed << std::setprecision(16) << 
  "|  " << func << "\t||  " << sum << "\t|" << "| " << f << "\t|\n";
Можно (нужно) еще добавить std::setw. Подберите значения, чтобы таблица получилась ровной.

Добавлено через 22 секунды
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
много нулей в начале, а другие цифры появляются через много знаков после точки?
Да, именно поэтому.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2016, 02:01     Отнимание двух double
Еще ссылки по теме:

C++ Аргумент типа double несовместим с параметром типа double
C++ Error: invalid types 'double [10][10][double]' for array subscript
Исправить ошибки "cannot convert 'double (*)(double)' to 'double'" и "too many arguments to function" C++

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

Или воспользуйтесь поиском по форуму:
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
26.10.2016, 02:01  [ТС]     Отнимание двух double #8
TheCalligrapher, понял, спасибо)
Yandex
Объявления
26.10.2016, 02:01     Отнимание двух double
Ответ Создать тему
Опции темы

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