Перейти к содержимому

Как возвести экспоненту в степень c

  • автор:

Как возвести экспоненту в степень c

24 D:\Ìîè äîêóìåíòû\main.cpp invalid operands of types `double’ and `double ()(double)’ to binary `operator*’
ошибка, почему?

Не имей привычки давать переменным имена, которые совпадают с названиями стандартных функций (имя переменной sin совпадает с именем стандартной функции std::sin)

Либо не имей привычки шарить пространства имен std на всю единицу трансляции, если нет полной уверенности в том, что делаешь.

#include #include #include using namespace std; int main() < double p; double one; double two; double three; double a,b; cout>a; cout>b; one= 2*tan(a+3*b); two= exp(2*a)+2.5*sin*3*b; //

Как написать экспоненту в C? 1 мин для чтения

MSI отдает дань уважения Monster Hunter, предлагая тематическую графику, материнскую плату и монитор

Favorite

Добавить в избранное

Как написать экспоненту в C?

В языке C значение экспоненты можно вычислить с помощью функции pow(). В этой статье мы узнаем, как использовать функцию pow() для выполнения операции возведения в степень. Мы также узнаем, как использовать оператор битового сдвига для выполнения операции возведения в степень. Мы попробуем написать пользовательскую функцию для вычисления показателей. Итак, приступим.

Синтаксис

double pow(double base, double exp);

Функция pow() определена в заголовочном файле math.h.

Аргументы

Эта функция принимает два аргумента, base и exp, для вычисления значения base, возведенного в степень exp . Здесь base и exp двойные.

Возвращаемые значения

В случае успеха функция pow() возвращает значение base, возведенное в степень exp.

Если значение exp равно 0, функция pow() возвращает 1.

Если base отрицательно, а exp не целое, функция pow() возвращает NaN (Not-A-Number).

//Example1.c #include #include int main() < int result; result = (int)pow(3,5); printf("\npow(3,5) =>%d",result); printf("\npow(3,-5) => %lf",pow(3,-5)); printf("\npow(-3,-5) => %lf",pow(-3,-5)); printf("\npow(3,5.1) => %lf",pow(3,5.1)); printf("\npow(-3,5.1) => %lf",pow(-3,5.1)); printf("\npow(-3,-5.1) => %lf\n",pow(-3,-5.1)); return 0; >

В Example1.c мы видели вывод функции pow(). При этом мы используем параметр -lm командной строки для ссылки в библиотеке математики. В строках с 10 по 13 мы получили ожидаемый результат. Для строк 14 и 15 у нас есть -nan (не число), потому что второй аргумент не является целым.

Экспонента с использованием битового сдвига

Если мы хотим вычислить показатель степени в степени 2, мы можем сделать это, используя битовый сдвиг.

Левый сдвиг на m эквивалентен первому члену и 2 — степени m.

Сдвиг вправо на m эквивалентен делению первого члена и 2 в степени m.
n>>m = n/pow(2,m)
Это работает только тогда, когда m положительно.
//Example2.c #include int main() < printf("\n 1< %d",1<<3); printf("\n 5< %d",5<<3); printf("\n -5< %d",-5<>3 => %d",40>>3); printf("\n 40>>3 => %d",40>>3); printf("\n -40>>3 => %d\n",-40>>3); return 0; >

В примере 2.c мы увидели, как можно использовать оператор сдвига битов для экспоненты в степени 2. Это очень полезно для уменьшения сложности кода.

Экспонента с использованием пользовательской функции

Мы можем написать пользовательскую функцию для вычисления показателей. В Example3.c мы напишем определяемую пользователем функцию exponent(), которая принимает два аргумента: based и exp типа float ant integer.

//Example3.c #include float exponent(float base, int exp) < float result =1.0; float i; if(exp < 0) < exp = -1 * exp; for(i=1;i<=exp;i++) result = result * base; result = 1.0/result; >else < for(i=1;i %f",exponent(3,0)); printf("\nexponent(3,-5) =>%f",exponent(3,-5)); printf("\nexponent(-3,-5) => %f",exponent(-3,-5)); return 0; >

Читать Как создать приложение Hello World на Python с помощью Tkinter

Example3.c мы видели вывод пользовательской функции exponent(). Эта функция работает, когда показатель степени является целым. Для реального показателя степени мы должны использовать функцию pow().

Заключение

В этой статье мы видели, как с помощью функции pow() и оператора сдвига битов можно вычислить экспоненту на языке C. Мы также научились писать нашу собственную функцию для вычисления показателей. Теперь мы без всяких сомнений можем использовать эти методы в нашей программе на языке C.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Возведение числа в степень Си

Не понимаю, как правильно реализовать, если у степени есть десятичная часть. Точнее я сделал это, но при 3х знаках после запятой у степени, там уже получается возведение в 1000 степень и на это тратится секунд 5. При 4х знаках после запятой уже ловлю seg fault.

Отслеживать
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
задан 1 дек 2022 в 10:51
13 2 2 бронзовых знака
Логарифм и exp можно использовать?
1 дек 2022 в 10:55
Да, можно использовать
1 дек 2022 в 11:00
Какая разница, сколько знаков после запятой у степени? Приведите пример
1 дек 2022 в 11:03
а^2.123 = a^2 * a^0.123.
1 дек 2022 в 11:05
pow(a,b) = exp(b*log(a))
1 дек 2022 в 11:08

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

#include #include double s21_pow(double a, double b) < return exp(b * log(a)); >int main() < double a, b; if (scanf("%lf%lf", &a, &b) == 2) < printf("%lf\n", s21_pow(a, b)); >> 
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror temp.c -lm $ echo 100 0.5 | ./a.out 10.000000 $ echo 100 1 | ./a.out 100.000000 $ echo 100 2 | ./a.out 10000.000000 

Это решение кажется вам слишком простым? Согласен. Решим задачу без использования .

Идею подсказал eri. Я ему благодарен.

Например 1.5 10.625 . Переведём показатель в двоичную систему счисления: 10.62510 = 1010.1012:

 i - номер значение 1.5^(2^i) бита бита 3 1 25.62890625 (= 5.0625 * 5.0625) 2 0 5.0625 (= 2.25 * 2.25) 1 1 2.25 (= 1.5 * 1.5) 0 0 1.5 . -1 1 1.22474487 (= sqrt(1.5)) -2 0 1.10668192 (= sqrt(1.22474487)) -3 1 1.05198951 (= sqrt(1.10668192)) 

Множители в правом столбце получаются последовательным возведением основания в квадрат для положительных бит. Для отрицательных бит надо последовательно извлекать квадратные корни.

Когда таблица составлена, надо перемножить числа соответствующие единичным битам:

1.5 10.625 = 25.62890625 · 2.25 · 1.22474487 · 1.05198951 = 74.29671764.

Осталось сосчитать корень квадратный. Это можно сделать двоичным поиском, если учесть что корень - функция обратная к возведению в квадрат. В итоге получается программа в которой используется сложение, вычитание, умножение и деление. Но деление только на два (что для двоичной вещественной арифметики - особый случай).

#include double sqrt(double a) < double low = 0; double high = (a < 1) ? 1 : a; for (; ; ) < double middle = (low + high) / 2; if (middle * middle low = middle; > else < if (middle == high) < return middle; >high = middle; > > > typedef struct < double b; double pow; >pow_t; void pow_integer(pow_t *p, double a, double b) < if (b b) < pow_integer(p, a * a, 2 * b); >if (b b) < p->b -= b; p->pow *= a; > > void pow_fractional(pow_t *p, double a, double b) < while (p->b > 0) < if (b b) < p->b -= b; p->pow *= a; > a = sqrt(a); b /= 2; > > double pow(double a, double b) < pow_t p = ; pow_integer(&p, a, 1); pow_fractional(&p, a, 1); return p.pow; > int main() < double b, e; if (scanf("%lf%lf", &b, &e) == 2) < printf("%lf\n", pow(b, e)); >> 

exp в C/C++: вычисляем экспоненту

�� Привет! В этой статье мы поговорим о функции exp . Эта функция позволяет нам вычислить экспоненту числа в C/C++. Сначала мы посмотрим как использовать эту функцию на примере, а потом попробуем реализовать ее сами. Также мы разберемся чем отличается exp от expl и expf . В конце статьи вы найдете упражнения для закрепления материала.

Иллюстрация exp

Как получить экспоненту числа в C/C++

Для того, чтобы вычислить экспоненту числа в C/C++, мы можем воспользоваться встроенной функцией exp . Эта функция доступна нам после подключения файла . В C++ можно подключить . Вот как выглядит прототип этой функции:

double exp (double x);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *