Как возвести в степень в си шарп
Перейти к содержимому

Как возвести в степень в си шарп

  • автор:

Math. Pow(Double, Double) Метод

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Возвращает указанное число, возведенное в указанную степень.

public: static double Pow(double x, double y);
public static double Pow (double x, double y);
static member Pow : double * double -> double
Public Shared Function Pow (x As Double, y As Double) As Double
Параметры

Число двойной точности с плавающей запятой, возводимое в степень.

Число двойной точности с плавающей запятой, задающее степень.

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

Число x , возведенное в степень y .

Примеры

В следующем примере метод используется Pow для вычисления значения, которое возникает при повышении значения 2 в степень в диапазоне от 0 до 32.

int value = 2; for (int power = 0; power ^ = <(long)Math.Pow(value, power):N0>(0x<(long)Math.Pow(value, power):X>)"); // The example displays the following output: // 2^0 = 1 (0x1) // 2^1 = 2 (0x2) // 2^2 = 4 (0x4) // 2^3 = 8 (0x8) // 2^4 = 16 (0x10) // 2^5 = 32 (0x20) // 2^6 = 64 (0x40) // 2^7 = 128 (0x80) // 2^8 = 256 (0x100) // 2^9 = 512 (0x200) // 2^10 = 1,024 (0x400) // 2^11 = 2,048 (0x800) // 2^12 = 4,096 (0x1000) // 2^13 = 8,192 (0x2000) // 2^14 = 16,384 (0x4000) // 2^15 = 32,768 (0x8000) // 2^16 = 65,536 (0x10000) // 2^17 = 131,072 (0x20000) // 2^18 = 262,144 (0x40000) // 2^19 = 524,288 (0x80000) // 2^20 = 1,048,576 (0x100000) // 2^21 = 2,097,152 (0x200000) // 2^22 = 4,194,304 (0x400000) // 2^23 = 8,388,608 (0x800000) // 2^24 = 16,777,216 (0x1000000) // 2^25 = 33,554,432 (0x2000000) // 2^26 = 67,108,864 (0x4000000) // 2^27 = 134,217,728 (0x8000000) // 2^28 = 268,435,456 (0x10000000) // 2^29 = 536,870,912 (0x20000000) // 2^30 = 1,073,741,824 (0x40000000) // 2^31 = 2,147,483,648 (0x80000000) // 2^32 = 4,294,967,296 (0x100000000) 
open System let value = 2 for power = 0 to 32 do printfn $"^ = int64:N0> (0x int64:X>)" // The example displays the following output: // 2^0 = 1 (0x1) // 2^1 = 2 (0x2) // 2^2 = 4 (0x4) // 2^3 = 8 (0x8) // 2^4 = 16 (0x10) // 2^5 = 32 (0x20) // 2^6 = 64 (0x40) // 2^7 = 128 (0x80) // 2^8 = 256 (0x100) // 2^9 = 512 (0x200) // 2^10 = 1,024 (0x400) // 2^11 = 2,048 (0x800) // 2^12 = 4,096 (0x1000) // 2^13 = 8,192 (0x2000) // 2^14 = 16,384 (0x4000) // 2^15 = 32,768 (0x8000) // 2^16 = 65,536 (0x10000) // 2^17 = 131,072 (0x20000) // 2^18 = 262,144 (0x40000) // 2^19 = 524,288 (0x80000) // 2^20 = 1,048,576 (0x100000) // 2^21 = 2,097,152 (0x200000) // 2^22 = 4,194,304 (0x400000) // 2^23 = 8,388,608 (0x800000) // 2^24 = 16,777,216 (0x1000000) // 2^25 = 33,554,432 (0x2000000) // 2^26 = 67,108,864 (0x4000000) // 2^27 = 134,217,728 (0x8000000) // 2^28 = 268,435,456 (0x10000000) // 2^29 = 536,870,912 (0x20000000) // 2^30 = 1,073,741,824 (0x40000000) // 2^31 = 2,147,483,648 (0x80000000) // 2^32 = 4,294,967,296 (0x100000000) 
Public Module Example Public Sub Main Dim value As Integer = 2 For power As Integer = 0 To 32 Console.WriteLine("^ = (0x)", _ value, power, CLng(Math.Pow(value, power))) Next End Sub End Module ' The example displays the following output: ' 2^0 = 1 (0x1) ' 2^1 = 2 (0x2) ' 2^2 = 4 (0x4) ' 2^3 = 8 (0x8) ' 2^4 = 16 (0x10) ' 2^5 = 32 (0x20) ' 2^6 = 64 (0x40) ' 2^7 = 128 (0x80) ' 2^8 = 256 (0x100) ' 2^9 = 512 (0x200) ' 2^10 = 1,024 (0x400) ' 2^11 = 2,048 (0x800) ' 2^12 = 4,096 (0x1000) ' 2^13 = 8,192 (0x2000) ' 2^14 = 16,384 (0x4000) ' 2^15 = 32,768 (0x8000) ' 2^16 = 65,536 (0x10000) ' 2^17 = 131,072 (0x20000) ' 2^18 = 262,144 (0x40000) ' 2^19 = 524,288 (0x80000) ' 2^20 = 1,048,576 (0x100000) ' 2^21 = 2,097,152 (0x200000) ' 2^22 = 4,194,304 (0x400000) ' 2^23 = 8,388,608 (0x800000) ' 2^24 = 16,777,216 (0x1000000) ' 2^25 = 33,554,432 (0x2000000) ' 2^26 = 67,108,864 (0x4000000) ' 2^27 = 134,217,728 (0x8000000) ' 2^28 = 268,435,456 (0x10000000) ' 2^29 = 536,870,912 (0x20000000) ' 2^30 = 1,073,741,824 (0x40000000) ' 2^31 = 2,147,483,648 (0x80000000) ' 2^32 = 4,294,967,296 (0x100000000) 

Комментарии

В следующей таблице указано возвращаемое значение, если для параметров и y заданы различные значения или диапазоны значений x . Дополнительные сведения см. в разделах Double.PositiveInfinity, Double.NegativeInfinity и Double.NaN.

x y Возвращаемое значение
NaN Любое значение, кроме 0 NaN
NaN 0 1 ( NaN на платформа .NET Framework)
Любое значение, кроме NaN 0 1
1 Любое значение, кроме NaN 1
1 NaN 1 ( NaN на платформа .NET Framework)
Любое значение, кроме 1 NaN NaN
NegativeInfinity < 0 0
NegativeInfinity Положительное нечетное целое число NegativeInfinity
NegativeInfinity Положительное, но нечетное целое число PositiveInfinity
< 0, но не NegativeInfinity Не целое число, NegativeInfinity или PositiveInfinity NaN
-1 = NegativeInfinity Или PositiveInfinity NaN
-1 < x < 1 NegativeInfinity PositiveInfinity
-1 < x < 1 PositiveInfinity 0
< -1 или >1 NegativeInfinity 0
< -1 или >1 PositiveInfinity PositiveInfinity
0 < 0 PositiveInfinity
0 > 0 0
PositiveInfinity < 0 0
PositiveInfinity > 0 PositiveInfinity

Этот метод вызывает базовую среду выполнения C, и точный результат или допустимый диапазон входных данных могут отличаться в разных операционных системах или архитектурах.

Возведение в степень

Author24 — интернет-сервис помощи студентам

Как я знаю, возведение дроби в степень 1^-1 меняет знаменатель и числитель
Итак, есть два числа:
n и m
Они делятся. В любом случае получается дробь:
m/n (Например, 7/35 = 1/5 = o)
Надо эту дробь умножить на степень 1^-1
Math.Pow пользоваться не умею, но в любом случае у меня пишет ошибку.
Вот что сейчас имеется:

1 2 3 4
int n = a[0]; int m = a[1]; int o = m / n; int output = Math.Pow(o, -1);

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Возведение в степень
Подробная задача: Определить количество повторений каждой из цифр 0,1,2. 9 в числе NN (N в.

Возведение в степень
пишу код вот тут не получается Math.Pow(a, iList) / (iList+1); пишет что качестве оператора.

Возведение 2 в заданную степень n(n > 0)
Здравствуйте, меня зовут Александр. Я после 9 класса (2012) поступил в колледж и закончил его в.

Не работает возведение в степень
создаю калькулятор) не могу разобраться с math.pow(условие для кнопки x^y) double operand3 =.

3491 / 2494 / 1174
Регистрация: 14.08.2016
Сообщений: 8,197

ну так надо прочитать сообщение об ошибке, подумать(повторить эти 2 действия до просветления) и исправить
тут ошибка одна

Math.Pow()

имеет тип возвращаемого значения double, а ты суешь его в int
Регистрация: 24.01.2016
Сообщений: 39
Так, а что теперь делат?
3491 / 2494 / 1174
Регистрация: 14.08.2016
Сообщений: 8,197

Лучший ответ

Сообщение было отмечено Abs0lutE как решение

Решение

double output = Math.Pow(o, -1);

либо приводить к int с гарантированной потерей точности

int output = (int)Math.Pow(o, -1);

Регистрация: 24.01.2016
Сообщений: 39

Первый способ помог, но странно.
(o, -1) возводит просто в один
А (o, 1) возводит в -1

Добавлено через 6 минут
Потому что я тупанул

3491 / 2494 / 1174
Регистрация: 14.08.2016
Сообщений: 8,197

все согласно написанного тобой, что бы было правильно почитай что такое целочисленное деление(int на int)

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Возведение в степень многочлена
Подскажите как возвести в степень многочлен, к прмеру: (x-1)^4 = x^4 — 4*x^3 + 6*x^2 — 4*x +1.

Возведение матрицы в степень.
Тупая семестровая задачка. Вообщем звучит так: "Следом квадратной матрицы называется сумма.

Возведение кватерниона в степень
Доброго времени суток всем. Только начинаю разбираться в Си#, поэтому никак не могу сообразить.

Возведение матрицы в степень
Задание: Консольное приложение. Которое подносит к произвольной степени матрицу произвольной.

Или воспользуйтесь поиском по форуму:

Как быстрее возводить число в степень?

Есть какая-то граница где до этого умножение работает быстрее, а после — Math.Pow , или наоборот?

П.Н.
Степень должен быть натуральное число.

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 6 фев 2020 в 18:14
2,847 3 3 золотых знака 14 14 серебряных знаков 28 28 бронзовых знаков
Как вы собираетесь в цикле возводить в степень 2,17?
6 фев 2020 в 18:18

Поясню. Например у меня переменная a . Для квадрата можно без цикла, то есть a*a; . А для степень > 2 используем цикл — for(int i = 0; i < 3; i++)< result *= a; >

6 фев 2020 в 18:22

Можно замерить самому, кто быстрее. Но вообще-то на десктопе степень вычисляет сопроцессор и делает это довольно быстро.

6 фев 2020 в 18:27

Хорошо, гуглите «быстрое возведение в степень», оно уже быстрее чем O(n), так что стоит ожидать, что библиотечная функция не будет реализована медленным способом

6 фев 2020 в 18:28

Для степени 4 надо сделать столько же умножений, как и для степени 3. Для степени 1024 надо всего то 10 умножений. А для 7 степени надо 3 умножения и деление. То есть просто циклами вы тут точно не отделаетесь 🙂 а вообще, если бы я одно и то же число часто возводил в степень, я бы степени заранее закешировал, и результат бы получал мгновенно (так, например, делают с таблицами синусов/косинусов иногда в играх). То есть ваш вопрос сильно от контекста зависит.

6 фев 2020 в 19:13

2 ответа 2

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

Обычно степень, в которую возводится число, не будет слишком большим. Например, .NET позволяет поместить в double результат 3^646 . Дальше результат воспринимается как бесконечность. Если тестировать производительность возведения степени с помощью цикла и с помощью библиотеки Math, то ощутимой разницы вы не почувствуете. И то и то вычисляется менее чем за милисекунду. Однако если считать количество тиков процессора, то цикл немного выигрывает за счет того, что библиотека Math позволяет возводить в вещественную степень ( double ), из-за чего возведение в целочисленную степень будет не самым оптимальным. На моем процессоре для вычисления 3^646 результаты получились следующими:

Math lib pow: 350-450 ticks

Manual pow: 250-400 ticks

static void Main(string[] args) < const double number = 3; const int pow = 646; /* var watch = Stopwatch.StartNew(); var powResult = Math.Pow(number, pow); watch.Stop(); */ var watch = Stopwatch.StartNew(); var powResult = 1.0d; for (var i = 0; i < pow; i++) < powResult *= number; >watch.Stop(); Console.WriteLine($"Pow result: "); Console.WriteLine($"Time execution: ticks"); > 

Как возвести число int в степень СИ ШАРП (c#) Math.Pow(x,y) требует чтобы x и y были double. А мне нужно инты

Да перемножить их. Без отдельного метода. Просто x*x. Любую степень так же в лоб через цикл или рекурсию, где счетчик будет нужной степенью.

Ну или конвертировать в double, использовать метод Math.Pow() и перевести обратно в int

Остальные ответы

Math.Pow без проблем принимает в качестве параметров int (неявное приведение типов). Только для возвращаемого значения нужно будет привести тип явно:

int x = (int)Math.Pow(a, b);

Вот так?
int x = (int)Math.Pow(a, b);
Круто.
Интересная система, теперь бы только это всё запомнить, ведь для этого и созданы языки программирования, чтобы не на алгоритме сосредоточиться, а на воспоминаниях.
Вот эти вот:
&=~
|=
Паскаль намного логичней, хотя на си писанины меньше.

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

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