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

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

Войти
Регистрация
Восстановить пароль
 
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
#1

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

26.10.2016, 01:20. Просмотров 141. Ответов 7
Метки нет (Все метки)

Решил помочь с задачей в одной теме и наткнулся на одну неведомую мне особенность: при отнимании двух 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2016, 01:20     Отнимание двух double
Посмотрите здесь:

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

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)" - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

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

Исправить ошибки "cannot convert 'double (*)(double)' to 'double'" и "too many arguments to function" - C++
пожалуйста проверьте и помогите исправить ошибки: #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;stdlib.h&gt; ...

Почему перестает работать программа при замене double на long double? - C++
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей - C++
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3695 / 1970 / 514
Регистрация: 18.10.2014
Сообщений: 3,557
26.10.2016, 01:30     Отнимание двух double #2
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
при отнимании двух double получается черт знает что
О каком именно "отнимании двух double" и о каком "черт знает что" идет речь? Потрудитесь внятно описать проблему.
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
26.10.2016, 01:38  [ТС]     Отнимание двух double #3
TheCalligrapher, при отнимании в этой строчке
C++
1
double  f = func - sum;
получается такое как на картинке в третьем столбце.
Прошу прощения за начальную формулировку вопроса)
Миниатюры
Отнимание двух double  
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
26.10.2016, 01:40  [ТС]     Отнимание двух double #4
там в коде
должно быть не
C++
1
float func
а
C++
1
double func
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3695 / 1970 / 514
Регистрация: 18.10.2014
Сообщений: 3,557
26.10.2016, 01:46     Отнимание двух double #5
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
получается такое как на картинке в третьем столбце.
В ваше третьем столбце все правильно. А что вы там ожидали увидеть? В чем проблема-то?

(Меня, кстати, удивляет, что в некоторых случаях вам таки удалось получить 0 в последнем столбце - вот где чудо!)
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
26.10.2016, 01:49  [ТС]     Отнимание двух double #6
TheCalligrapher, как тогда избежать такой формы записи?
я правильно понял, что они отнимаются, просто на экран выводятся не в такой форме как мы привыкли из за того, что много нулей в начале, а другие цифры появляются через много знаков после точки?
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3695 / 1970 / 514
Регистрация: 18.10.2014
Сообщений: 3,557
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
Еще ссылки по теме:

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

Аргумент типа double несовместим с параметром типа double - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;math.h&gt; using namespace std; #define c 40 #define n 5 double po(double...

Аргумент типа double несовместим с параметром типа double* - C++
Функция function должна возвращать количество элементов массива, значение которые превышает значение средне арифметического элементов...

Ошибка "Невозможно преобразовать аргумент 1 из "double" в "double *" - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double f(double *a, double x) { double k = 0; int n; for (int i = 0;...


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

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

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