Замена функции Pow - C (СИ)
Формулировка задачи:
Здравствуйте, можно ли как-то иначе заменить функцию Pow?
#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; }
Решение задачи: «Замена функции Pow»
textual
Листинг программы
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; }
Объяснение кода листинга программы
- В функции
power_recursive
происходит рекурсивный вызов функцииpower_recursive
с аргументами(x, n-1)
. - Если
n
равно 0, то возвращается 1. - В функции
power_effective
инициализируется переменнаяp
равной 1. - Затем в цикле
while
происходит проверка битаn
на 1. - Если бит
n
равен 1, то переменнаяp
умножается наx
. - Значение
n
сдвигается вправо на 1 бит. - Значение
x
умножается наx
. - Цикл продолжается до тех пор, пока
n
больше 0. - По завершении цикла возвращается значение переменной
p
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д