С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 5.00
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

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

03.04.2012, 00:46. Просмотров 4948. Ответов 10
Метки нет (Все метки)

Как возвести в степень, не используя pow(a, b) ? И не пользуясь math.h
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2012, 00:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возведение в степени, не используя pow (C++):

Возведение в степень pow - C++
Не могу понять почему выдаёт ошибку "while trying to match the argument list '(int, int)'". Если объявлять переменные через double, то...

возведение в степень, pow - C++
вычитал что возведение в степень - функция pow. #include "stdafx.h" #include <math.h> #include <iostream> using namespace...

Не работает возведение в степень через pow - C++
почему не работает?? не пойму #include <iostream> using namespace std; #include <cmath> int power(int, int); int...

Возведение матрицы в степень с использованием функции pow - C++
Дана задача: возвести матрицу, введенную с клавиатуры (необязательно квадратную) в степень, так же введенную с клавиатуры. После чего...

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

Нахождение степени числа (pow) - C++
Помогите пожалуйста написать программу. Я так понял тут нужно использовать функцию Pow и возводить основание (-3 в данном случае), в разные...

10
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
03.04.2012, 00:49 #2
C
1
2
3
int i = 1;
while(i<stepen)
   chislo *=chislo;
Так, наверное....
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
03.04.2012, 00:51  [ТС] #3
Merovingian, для натуральной степени, да, это просто. А вот как быть, к примеру, с 15,68^12,71 ?
0
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
03.04.2012, 02:00 #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} + ...
0
N0valS
1 / 1 / 0
Регистрация: 02.04.2012
Сообщений: 28
03.04.2012, 02:01 #5
Цитата Сообщение от Ksan Посмотреть сообщение
Merovingian, для натуральной степени, да, это просто. А вот как быть, к примеру, с 15,68^12,71 ?
пользователь вводит степень и число, тип данных не int а float.
0
Kuzia domovenok
2060 / 1905 / 174
Регистрация: 25.03.2012
Сообщений: 6,566
Записей в блоге: 1
03.04.2012, 02:19 #6
а чем не устраивает а в степени b?
C
1
pow=exp(b* ln(a));
старый проверенный трюк, только a>0 должно быть.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
03.04.2012, 18:40  [ТС] #7
Kuzia domovenok, exp и ln хранятся в math.h, я хочу без нее
0
Kuzia domovenok
2060 / 1905 / 174
Регистрация: 25.03.2012
Сообщений: 6,566
Записей в блоге: 1
03.04.2012, 19:40 #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));
}
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.04.2012, 19:45 #9
Цитата Сообщение от Ksan Посмотреть сообщение
exp и ln хранятся в math.h, я хочу без нее
Про ряд Тейлора слышали?
1
vua72
416 / 416 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
01.03.2013, 21:12 #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 минут
не туда, сорри.
0
Байт
Нарушитель
Эксперт C
16688 / 10951 / 1685
Регистрация: 24.12.2010
Сообщений: 21,348
01.03.2013, 22:28 #11
Цитата Сообщение от Ksan Посмотреть сообщение
хранятся в math.h, я хочу без нее
Тогда вам ничего не остается, как самому реализовать эти функции (double MyExp(double arg) и прочие) Знаний математики в пределах первого курса должно хватить.
0
01.03.2013, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 22:28
Привет! Вот еще темы с ответами:

Возведение степени в степень - C++
Я думаю из заголовка всё ясно. Мне нужно экспоненту возвести в степень -x, а -x ещё и в квадрат. e-x2 Спасибо.

Создать функцию вычисления степени числа с показателем (без использования функции pow) - C++
Создать функцию вычисления степени натурального числа с натуральным показателем (без использования функции pow) и вычислить с ее помощью...

Реализовать возведение квадратной матрицы в степень, где показатель степени - заданный вектор - C++
Даны квадратная матрица A порядка n и вектор b с n элементами. Получить вектор A^2b. Помогите пожалуйста не могу понять как можно...

Определить степень числа с целочисленным показателем, не используя функцию pow - C++
Написать программу, которая определяет степень числа с целочисленным показателем, не используя функцию pow. a^k, где к может быть...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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