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

Вычисление экспоненты - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
tatarin4555
10 / 10 / 0
Регистрация: 20.11.2012
Сообщений: 155
Записей в блоге: 1
03.03.2013, 16:14     Вычисление экспоненты #1
Разработать программу, вычисляющую e^x= 1 + x + x^2/2! + x^3/3! +...+ x^n/n! c точностью эпсилон.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 16:14     Вычисление экспоненты
Посмотрите здесь:

C++ Ряд Тейлора. Разложение экспоненты
C++ Расчет значения экспоненты
как вывести float без экспоненты? C++
Вычисление экспоненты C++
Вычисление экспоненты C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
03.03.2013, 20:43     Вычисление экспоненты #2
я бы сделал две функции помимо майна - подсчёта факториала и собсна подсчёта экспоненты, факториал писать нечего, ну а для экспоненты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cmath>
 
double myExp(double x, double epsilon)
{
double result = 1;
double i = 1;
while((exp(x) - result) > epsilon)
{
result += x*i/factorial(i);
i++;
}
return result;
}
...
tatarin4555
10 / 10 / 0
Регистрация: 20.11.2012
Сообщений: 155
Записей в блоге: 1
03.03.2013, 22:39  [ТС]     Вычисление экспоненты #3
я сделал но не работает, можешь скинуть весь код?
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
04.03.2013, 21:16     Вычисление экспоненты #4
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
37
38
39
40
41
#include <iostream>
#include <cmath>
 
using namespace std;
 
double factorial(double n)
{
    double result;
    if(n == 0.0)
    {
        result = 1.0;
        return result;
    }
    result = factorial(n - 1.0) * n;
    return result;
}
 
 
double myExp(double x, double epsilon)
{
    double result = 1;
    double i = 1;
    while((exp(x) - result) > epsilon)
    {
        result += pow(x, i)/factorial(i);
        i++;
    }
    return result;
}
 
 
 
int main()
{
 
    double x = 3.0;
    cout<<"Exp = "<<exp(x);
    cout<<"\nMyExp = "<<myExp(x, 0.01)<<endl;
    cin.get();
    return 0;
}
tatarin4555
10 / 10 / 0
Регистрация: 20.11.2012
Сообщений: 155
Записей в блоге: 1
04.03.2013, 22:35  [ТС]     Вычисление экспоненты #5
1>------ Построение начато: проект: Lab1, Конфигурация: Debug Win32 ------
1> stdafx.cpp
1>d:\documents\visual studio 2010\projects\lab1\lab1\stdafx.h(10): fatal error C1083: Не удается открыть файл включение: stdio.h: No such file or directory
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
вот такую ошибку выдает
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
05.03.2013, 11:27     Вычисление экспоненты #6
создавай пустой проект без stadfx, единственный файл cpp
кстати препод может возбухнуть так что лучше функцию myExp написать так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double myExp(double x, double epsilon)
{
    double result = 1;
    double i = 1;
    double add;
    while(add > epsilon)
    {
        add = pow(x, i)/factorial(i);
        result += add;
        i++;
    }
    return result;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.03.2013, 11:53     Вычисление экспоненты #7
Цитата Сообщение от Кудаив Посмотреть сообщение
кстати препод может возбухнуть так что лучше функцию myExp написать так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double myExp(double x, double epsilon)
{
      double result = 1;
      double i = 1;
      double add;
      while(add > epsilon)
      {
            add = pow(x, i)/factorial(i);
            result += add;
            i++;
      }
     return result;
}
а ещё нормальный препод скажет, что функция неоптимальна.
Она зачем то вычисляет степени(pow)
ещё и факториалы в цикле вычисляет...
и к тому же каким-то макаром оперирует числами не int, а double.
Да и вообще она просто ошибочна, т.к. при первой итерации цикла условие add>epsilon не работает должным образом. (впрочем оно никогда и не работает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double myExp(double x, double epsilon)
{
      double result = 0.0;
      int i = 1;
      double add=1.0;
      while(fabs(add) > epsilon)
      {
            result += add;
            add = add*x/i;        
            i++;
      }
      return result;
}
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
05.03.2013, 12:32     Вычисление экспоненты #8
Kuzia domovenok, спасибо и меня подучили))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 16:34     Вычисление экспоненты
Еще ссылки по теме:

Степень отрицательной экспоненты C++
C++ Вычисление экспоненты
C++ Вычисление экспоненты как суммы ряда

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

Или воспользуйтесь поиском по форуму:
tatarin4555
10 / 10 / 0
Регистрация: 20.11.2012
Сообщений: 155
Записей в блоге: 1
05.03.2013, 16:34  [ТС]     Вычисление экспоненты #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ещё нормальный препод скажет, что функция неоптимальна.
Она зачем то вычисляет степени(pow)
ещё и факториалы в цикле вычисляет...
и к тому же каким-то макаром оперирует числами не int, а double.
Да и вообще она просто ошибочна, т.к. при первой итерации цикла условие add>epsilon не работает должным образом. (впрочем оно никогда и не работает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double myExp(double x, double epsilon)
{
      double result = 0.0;
      int i = 1;
      double add=1.0;
      while(fabs(add) > epsilon)
      {
            result += add;
            add = add*x/i;        
            i++;
      }
      return result;
}
А можешь мне с прогой помощь?
Yandex
Объявления
05.03.2013, 16:34     Вычисление экспоненты
Ответ Создать тему
Опции темы

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