Блог программиста
Математика Unity (Урок 6). Mathf две степени и три логарифма.
06.07.2013Математика Unity

Показатель степени числа А — это число обозначающее, сколько раз число А должно быть умножено само на себя. Логарифм числа b с основанием N — показатель степени, в которую надо возвести основание N, чтобы получить число b.

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

В Unity (C#) для возведения в степень есть функция:
Mathf.Pow(float n, float p)	//Возведение в степень


Данная функция возвращает значение n в степени p.

Возводить в степень может понадобиться в разных ситуациях. Например при нахождение площади или объёма.
Но с точки зрения производительности, данная функция не всегда хороший вариант.
Я сравнил три способа возведения в степень:
  1. С помощью цикла for.
  2. “Вручную” - простым умножением n раз.
  3. С помощью функции Mathf.Pow

Результаты (секунд на 1000000 операций):
(Строка - способ, столбец - степень)
Вторая Третья Четвёртая Десятая Сотая
Цикл 0.01 0.013 0.015 0.05 0.5
"Вручную" 0.007 0.007 0.008 0.016 0.16
Mathf.Pow 0.085 0.085 0.085 0.086 0.086

Как видно из таблицы для маленьких степеней считать «вручную» выгоднее, чем с помощью функции Pow.
Выводы:
  1. “Ручной” способ выгоден при степенях меньше пятидесятой.
  2. При изменяющейся степени (но меньше 20), выгоднее использовать цикл.
  3. Mathf.Pow выгодно использовать для случаев не попадающих в первые два вывода, а также в случае дробного показателя степени (примерно в 1.5 раза быстрее, чем «вручную». Но при показателе степени равном 0.5 выгоднее использовать Mathf.Sqrt

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

Для возведения в степень экспоненты в Unity (C#) есть отдельная функция:
Mathf.Exp(float p)		//Возведение экспоненты в степень

Логарифмы

Вычисление логарифма в Unity (C#) производиться через функцию:
Mathf.Log(float f, float b)		//Логарифм

Например
Mathf.Log(25, 5);

Вернёт 2.
Для получения натурального логарифма (основание - экспонента) в Unity (C#) достаточно не указывать основание:
Mathf.Log(float f)		//Натуральный логарифм

Для логарифма с основанием 10 есть отдельная функция:
Mathf.Log10(float f)		//Логарифм с основанием 10

Важно помнить:
  1. Логарифма нуля не существует
  2. Логарифм любого числа (кроме 1) с основанием 1 равен бесконечности.

Конец.
P.S. Если что-то не понятно, пишите в комментариях.

10309