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

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

Войти
Регистрация
Восстановить пароль
 
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
#1

Возведение в вещественную степень - C++

17.06.2014, 18:16. Просмотров 673. Ответов 5
Метки нет (Все метки)

Здравствуйте, требуется ваша помощь.
У меня дано float a,x,n, вычислить a^x с точностью eps=10^(-n) и можно пользоваться только +,-,*,/.
Подскажите пожалуйста)
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 18:16     Возведение в вещественную степень
Посмотрите здесь:

Возведение отрицательного числа в вещественную степень - C++
Здравствуйте. Подскажите, как можно реализовать алгоритм возведения отрицательного числа в вещественную степень. К примеру -5^5.5; Ведь...

Программа возведения комплексного числа в вещественную степень !!! - C++
Программа возведения комплексного числа в вещественную степень : (a+Bi) в степени c (по формуле Муавра) Ввод вещественных значений...

возведение в степень! - C++
Кто помнит функцию возведения в степень.?? "трам-пам-пам" (a,b) ???? Добавлено через 3 минуты И еще желательно...

Возведение в степень. C++ - C++
можно ли написать программу для возведения в вводимую степень вводимого числа с помощью рекурсивной функции

Возведение в степень! - C++
Возник вопрос - Возможно пока не понятна в чем мысль! Попробую на примере объяснить! Возведение числа 2 в 1000 - ую степень будет...

Возведение в степень - C++
Здравствуйте! Есть какой то другой способ возведения в степень чем а^3 = а*а*а А если нужно в 100 степень возводить то умереть и не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
17.06.2014, 19:05     Возведение в вещественную степень #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Banddk, ятп нужно раскладывать в ряд, а потом суммировать до определенного члена.

Добавлено через 8 минут
http://www.wolframalpha.com/input/?i=x%5Ea+taylor

Добавлено через 1 минуту
из первой формулы по ссылке сможете написать цикл, который суммирует значения. Остается только написать вспомогательную функцию вычисления биноминального коэффициента (он обощначен в скобочках, это Сkn = n!/k!(n-k)!)
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
17.06.2014, 20:53  [ТС]     Возведение в вещественную степень #3
Спасибо))

Добавлено через 5 минут
У меня ведь вещественная степень, как мне брать факториал этого числа ?
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
18.06.2014, 11:05     Возведение в вещественную степень #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Banddk, можно попробовать через гамма-функцию. Хотя как-то сложно получается

Добавлено через 20 минут
Banddk, хотя, может, проще будет посчитать
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{b} = {a}^{n}{a}^{f}, n \in Z, f \in (0..1)
после этого можно воспользоваться формулой .
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{f} = {e}^{f*ln(a)}
при этом ряды тейлора для логарифма и экспоненты довольно простые.

Добавлено через 18 минут
Хотя не, логарифм нормально считается только для a in (-1..1)

Добавлено через 2 минуты
Блин, точно. Логарифм можно посчитать через интеграл же.

Добавлено через 20 минут
Короче, держи
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <cmath>
 
using namespace std;
 
 
double simpson(double(*f)(double), double a, double b)
{
    double result = (b - a) / 6;
    result *= f(a) + 4 * f((a + b) / 2) + f(b);
    return result;
}
 
double f(double x)
{
    return 1 / x;
}
 
double my_ln(double x)
{
    if (x == 1)
        return 0;
    if (x <= 0)
        return NAN;
    double result = 0;
    double step = (x - 1) / 100;
    for (double a = 1; a < x; a += step)
        result += simpson(f, a, a + step);
    return result;
}
 
double my_exp(double x, double epsilon)
{
    double result = 1;
    double m = x;
    for (int i = 2; abs(m) >= epsilon; i++)
    {
        result += m;
        m *= x / i;
    }
    return result;
}
 
double my_pow(double a, double b, double epsilon)
{
    if (b < 0)
        return my_pow(1 / a, -b, epsilon);
    int div = (int)b;
    double integerPart = 1;
    for (int i = 0; i < div; i++)
        integerPart *= a;
    return integerPart * my_exp((b - div) * my_ln(a), epsilon);
}
 
int main()
{   
    cout << my_ln(15) << endl;
    cout << my_exp(3, 0.001) << endl;
    cout << my_pow(2, 3, 0.001) << endl;
}
если нужны пояснения - обращайся.
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
19.06.2014, 01:29  [ТС]     Возведение в вещественную степень #5
Огромное спасибо))) Но если честно у меня ощущение, что преподаватель просто ошибся с заданием как-то тяжело ) хотя должно было быть простым
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 13:03     Возведение в вещественную степень
Еще ссылки по теме:

Возведение в степень - C++
подскажите,пожалуйста, способ реализации (алгоритм)операции возведение в степень числа с показателем более 200. Результат не должен...

Возведение в степень - C++
Подскажите пожалуйста алгоритм возвидения в степень, есть карта в которой храниться разные цифры мой велосипед for (std::map&lt;int,...

Возведение в степень - C++
Всем привет! Нужно найти значение выражения 2^(x^y), х=3,251, у=0,325. Что-то я запуталась... То ли тип указала не тот, то ли еще...

Возведение в степень - C++
Вам конечно это покажется тупой проблемой, но всё же. Напишите пожалуйста как возводить в степень на си и пример. В инете что ищу всё на...

Возведение в степень - C++
Совсем недавно начал изучать C++. Учу по книге. Было задание: Вводишь число Вводишь степень в которую надо возвести это число ...

Возведение в степень - C++
напишите программный код для С++ Builder


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

Или воспользуйтесь поиском по форуму:
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
19.06.2014, 13:03     Возведение в вещественную степень #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Banddk, у меня тоже такое ощущение. Но что поделать... Зато если разберешься, он прифигеет слегка

Добавлено через 5 минут
к тому же можнт у меня с математикой не лады и можно было сделать в 2 присеста через какой-нибудь хитрый ряд

Добавлено через 9 часов 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cmath>
 
using namespace std;
 
 
double simpson(double(*f)(double), double a, double b)
{
    double result = (b - a) / 6;
    result *= f(a) + 4 * f((a + b) / 2) + f(b);
    return result;
}
 
double f(double x)
{
    return 1 / x;
}
 
double my_ln(double x)
{
    if (x == 1)
        return 0;
    if (x <= 0)
        return NAN;
    double result = 0;
    double step = (x - 1) / 100;
    for (double a = 1; a < x; a += step)
        result += simpson(f, a, a + step);
    return result;
}
 
double my_pow(double a, double b, double epsilon)
{
    double result = 1, tmp = 1;
    double m = b * my_ln(a);
    for (int i = 1; abs(tmp) >= epsilon; i++)
    {
        tmp *= m / i;
        result += tmp;
    }
    return result;
}
 
int main()
{
    cout << my_ln(15) << endl;
    cout << my_pow(2, 3, 0.001) << endl;
}
просто убираем экспоненту. По формуле http://www.cyberforum.ru/cgi-bin/latex.cgi?a^x = \sum  \frac{x^n log^n(a)}{n!}.
Соответственно, чуть покороче и попроще. Логарифм тут тоже считается с помощью определенного интеграла через формулу Симпсона (мы помним, что интеграл от 1/x это ln|x|, поэтому интегрируя 1/x можно получить значение логарифма). Другого способа найти логарифм от произвольного числа я не нашел (ряд разлагается только для x от 0 (не включая) до двух. Дальше он расходится.
Yandex
Объявления
19.06.2014, 13:03     Возведение в вещественную степень
Ответ Создать тему
Опции темы

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