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

Возведение в степени, не используя pow - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 5.00
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
03.04.2012, 00:46     Возведение в степени, не используя pow #1
Как возвести в степень, не используя pow(a, b) ? И не пользуясь math.h
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2012, 00:46     Возведение в степени, не используя pow
Посмотрите здесь:

C++ Возведение в степень используя рекурсию
возведение в степень, pow C++
Возведение в степень pow C++
C++ Нахождение степени числа (pow)
Возведение степени в степень C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
03.04.2012, 00:49     Возведение в степени, не используя pow #2
C
1
2
3
int i = 1;
while(i<stepen)
   chislo *=chislo;
Так, наверное....
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
03.04.2012, 00:51  [ТС]     Возведение в степени, не используя pow #3
Merovingian, для натуральной степени, да, это просто. А вот как быть, к примеру, с 15,68^12,71 ?
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
03.04.2012, 02:00     Возведение в степени, не используя pow #4
Цитата Сообщение от Ksan Посмотреть сообщение
Merovingian, для натуральной степени, да, это просто. А вот как быть, к примеру, с 15,68^12,71 ?
Ну вот заинтересовало тоже) У меня с математикой очень плохо!

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{b} = {e}^{bln(a)}


А число e в любой степени можно найти с помощью ряда Маклорена

http://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{b} = 1 + \frac{b}{1!} + \frac{{b}^{2}}{2!} + \frac{{b}^{3}}{3!} + ... + \frac{{b}^{n}}{n!}

Как и натуральный логаримф

http://www.cyberforum.ru/cgi-bin/latex.cgi?ln(1 + b) = b - \frac{{b}^{2}}{2} + \frac{{b}^{3}}{3} - \frac{{b}^{4}}{4} + ...
N0valS
 Аватар для N0valS
1 / 1 / 0
Регистрация: 02.04.2012
Сообщений: 28
03.04.2012, 02:01     Возведение в степени, не используя pow #5
Цитата Сообщение от Ksan Посмотреть сообщение
Merovingian, для натуральной степени, да, это просто. А вот как быть, к примеру, с 15,68^12,71 ?
пользователь вводит степень и число, тип данных не int а float.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.04.2012, 02:19     Возведение в степени, не используя pow #6
а чем не устраивает а в степени b?
C
1
pow=exp(b* ln(a));
старый проверенный трюк, только a>0 должно быть.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
03.04.2012, 18:40  [ТС]     Возведение в степени, не используя pow #7
Kuzia domovenok, exp и ln хранятся в math.h, я хочу без нее
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.04.2012, 19:40     Возведение в степени, не используя pow #8
Цитата Сообщение от Ksan Посмотреть сообщение
Kuzia domovenok, exp и ln хранятся в math.h, я хочу без нее
Merovingian дал замечательные формулы вычисления ln и exp они подходят и для дробных аргументов.
Собственно math.h тоже скорее всего по ним считает.

Добавлено через 12 минут
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
const float eps=0.01;
float Myexp(float x){
 float a=1.0;
 float sum;
 float n=1.0;
  while (a>eps){
   a=a*x/n;
   sum=sum+a;
   n=n+1.0;
  }
  return sum;
}
float Myln(float x){
 float a=1.0;
 float sum;
 float n=2.0;
 x=x-1.0;
  while (a>eps){
   a=a*(-x);
   sum=sum+a/n;
   n=n+1.0;
  }
  return sum;
}
float MyPow(float x, float y){
return MyExp(y*Myln(x));
}
Добавлено через 29 минут
Ой, только вот с логарифмом поторопился я - там явная ошибка

Добавлено через 11 минут
Цитата Сообщение от Ksan Посмотреть сообщение
Kuzia domovenok, exp и ln хранятся в math.h, я хочу без нее
Так лучше
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
const float eps=0.01;
float Myexp(float x){
 float a=1.0;
 float sum=1.0;
 float n=1.0;
  while (a>eps){
   a=a*x/n;
   sum=sum+a;
   n=n+1.0;
  }
  return sum;
}
float Myln(float x){
 float a=1.0;
 float p=1.0;
 float sum=0.0;
 float n=1.0;
 x=x-1.0;
 
  while (fabs(a)>eps){
   a=(p/n)-(p*x)/(n+1);
   sum+=a;
   p=p*x*x;
   n+=2.0;
  }
  return sum;
}
float MyPow(float x, float y){
return MyExp(y*Myln(x));
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.04.2012, 19:45     Возведение в степени, не используя pow #9
Цитата Сообщение от Ksan Посмотреть сообщение
exp и ln хранятся в math.h, я хочу без нее
Про ряд Тейлора слышали?
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
01.03.2013, 21:12     Возведение в степени, не используя pow #10
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
#include <stdio.h>
//#include <conio.h>;
#include <math.h>
float sum(float , float );
int main()
{
    float x,k,prec,y,z;
    int p;
    //printf("enter number \n");
    //scanf(" %f",&x);
    //printf("enter degree\n");
    //scanf(" %f",&k);
    //printf("enter accuracy \n");
    //scanf(" %f",&prec);
    x=0.25;
    k=4.4;
    y=1;
    p=k;
    if (x==0) {
        printf("x=0");
    }
    if ((x>0) && (k>0)) {
        printf("result:  %f \n",sum (x,k));
    }
    if ((x>0) && (k<0)) {
        z=1/sum(x,fabs(k));
        printf("result:  %f \n",z);
    }
    if ((x<0) && (k>0) && ((p%2)!=0)) {
        z=sum(fabs(x),k)-2*sum(fabs(x),k);
        printf("result:  %f \n",z);
    }
    if ((x<0) && (k<0) && ((p%2)!=0)) {
        z=1/(sum(fabs(x),fabs(k))-2*sum(fabs(x),fabs(k)));
        printf("result:  %f \n",z);
    }
    if ((x<0) && ((p%2)==0)) {
        printf("inccorect, if x<0, degree must be unparne");
    }
    if (k==0) {
        printf("  degree cant be zero");
    }
    return 0;
}
float sum(float x, float k)
{
    float yk, prec=1e-5, y=1.0, b;
    int i;
    do {
        yk=y;
        for (i=k-1; i>1; i--) yk=y*yk; //????? здесь вы иеряете точность
        b=(1/k)*((x/yk)-y);
        if (fabs(b)>prec) y=y+b;
    } while (fabs(b)>prec);
    return y;
}
Добавлено через 1 минуту
Я переделал немного, часть подправил, а логику исправляете сами. Вы фактически возводите число в степень 4, а не 4.4. Скорее всего явм нужно разбираться с суммой.

Добавлено через 14 минут
не туда, сорри.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 22:28     Возведение в степени, не используя pow
Еще ссылки по теме:

C++ Определить степень числа с целочисленным показателем, не используя функцию pow
возведение в степень pow(x,y) C++
C++ Создать функцию вычисления степени числа с показателем (без использования функции pow)

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

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13952 / 8783 / 1221
Регистрация: 24.12.2010
Сообщений: 15,891
01.03.2013, 22:28     Возведение в степени, не используя pow #11
Цитата Сообщение от Ksan Посмотреть сообщение
хранятся в math.h, я хочу без нее
Тогда вам ничего не остается, как самому реализовать эти функции (double MyExp(double arg) и прочие) Знаний математики в пределах первого курса должно хватить.
Yandex
Объявления
01.03.2013, 22:28     Возведение в степени, не используя pow
Ответ Создать тему
Опции темы

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