2 / 2 / 2
Регистрация: 04.11.2012
Сообщений: 70
1

Замена функции Pow

17.10.2015, 10:47. Показов 3930. Ответов 6
Метки нет (Все метки)

Здравствуйте, можно ли как-то иначе заменить функцию Pow?

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
#include <stdio.h>
#include <math.h>
 
//Замена Pow
double Ext (int x, int n) {
    int ext = 1, i;
    for (i = 1; i <= n; i++) {
        ext *= x;
    }
    return ext;
}
 
double Sum(int n) {
    double sum = 0;
    for (int i = 2; i <= n; i++) {
        sum += Ext(-1, i) * (i/(Ext(i, 3) - i));
    }
    return sum;
}
 
int main(int argc, const char * argv[]) {
    int n;
    printf("n = "); scanf("%d", &n);
    printf("sum = %.10f\n", Sum(n));
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2015, 10:47
Ответы с готовыми решениями:

Не работает использование функции pow.
Привет всем. Пишу в VC++ 2010 EE. Написал кусок программки с функцией pow, а она почему-то не...

Возвести заданное число в целую степень без использования функции pow (цикл while)
Возвести заданное число в целую степень без использования функции pow

Замена функции Pow
Добрый день, подскажите пожалуйста чем можно заменить функцию Pow?или может есть какие то другие...

при вызове функции pow() выдаёт ошибку: test.cpp:(.text+0x59b): undefined reference to `pow'
В чём дело? Добавлено через 1 минуту ps. Заголовок math.h подключен.

6
25 / 26 / 16
Регистрация: 27.09.2015
Сообщений: 110
17.10.2015, 11:29 2
adel132, возведение в квадрат можно сделать как побитовый сдвиг влево.
0
429 / 383 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
17.10.2015, 11:32 3
Лучший ответ Сообщение было отмечено adel132 как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
int power_recursive(int x, unsigned int n) {
    return n == 0 ? 1 : x * power_recursive(x, n - 1);
}
 
int power_effective(int x, unsigned int n) {
    int p = 1;
    while (n) {
        if (n & 1) { p *= x; }
        n >>= 1;
        x *= x;
    }
    return p;
}
2
2 / 2 / 2
Регистрация: 04.11.2012
Сообщений: 70
17.10.2015, 12:02  [ТС] 4
Еще фишка в том, что у нас проверяют большие числа. Например число 1 000 000 000 должно как можно быстро вычисляться в этой программе.
0
502 bad gateway
Эксперт PHP
4646 / 3780 / 1572
Регистрация: 24.04.2014
Сообщений: 11,073
17.10.2015, 12:13 5
Цитата Сообщение от Pavel Kisliuk Посмотреть сообщение
возведение в квадрат можно сделать как побитовый сдвиг влево.
это только для числа 2 будет работать

Добавлено через 3 минуты
Цитата Сообщение от Vtulhu Посмотреть сообщение
power_effective
Я бы еще в начало добавил проверку, при x = -1
C
1
2
3
if (x == -1) {
    return n & 1 ? -1 : 1;
}
1
429 / 383 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
17.10.2015, 12:30 6
Цитата Сообщение от adel132 Посмотреть сообщение
Еще фишка в том, что у нас проверяют большие числа. Например число 1 000 000 000 должно как можно быстро вычисляться в этой программе.
Моя функция power_effective именно такова. Только тип int надо заменить на long или long long, или что вам нужнее.

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Я бы еще в начало добавил проверку, при x = -1
Все случаи от -2 до 2 являются специфическими. Можно их предусмотреть, да. Но в общем случае моя функция идеальна. Эффективнее только ассемблер, пожалуй.
0
2 / 2 / 2
Регистрация: 04.11.2012
Сообщений: 70
17.10.2015, 22:31  [ТС] 7
нашел еще один вариант, может кому понадобиться
C
1
2
3
4
long double Step(double x, double y)
{
    return exp(y * log(x));
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2015, 22:31
Помогаю со студенческими работами здесь

Pow не работает в функции
void gip(int &amp;a, int &amp;d); int main() {int a,d; cin&gt;&gt;a; gip(a,d); _getch(); return 0;...

Вопрос по функции POW
есть 2 переменные double first; unsigned int second; Хочу сделать pow (second, first); ...

Использование функции pow
int x,z,h; z=38; cin&gt;&gt;x; h=pow(z,x); cout&lt;&lt;h; getch(); если даю 1,2,3,4,5,6 как Х, то...

Некорректная работа функции pow
Доброго времени суток. задали в универе написать прогу которая решала б кубическое уравнение.В...

Pow: нет перегруженной функции
Ошибка 2 error C2661: pow: нет перегруженной функции, принимающей 1...

Оптимизация функции Math.pow
Добрый день уважаемые знатоки. Хотел спросить, можна ли как то оптимизировать функцию math.pow....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru