Как работает Math.Pow (и так далее)

Таким образом, я долгое время работал в Интернете, и я почти ничего не нашел. Я нашел некоторую информацию о возможной реализации Math.Pow из этого URL- адреса, но они неточны, например, этот код

public static double PowerA(double a, double b) { int tmp = (int)(BitConverter.DoubleToInt64Bits(a) >> 32); int tmp2 = (int)(b * (tmp - 1072632447) + 1072632447); return BitConverter.Int64BitsToDouble(((long)tmp2) << 32); } static void Main(string[] args) { double x = 12.53, y = 16.45; Console.WriteLine(Math.Pow(x, y)); Console.WriteLine(PowerA(x, y)); } 

обеспечивает выход:

 1,15158266266297E+18 8,9966384455562E+17 

Так неточно …

Я думал, что это работает как серия серий, но я точно не знаю.

One Solution collect form web for “Как работает Math.Pow (и так далее)”

pow обычно оценивается по этой формуле:

 x^y = exp2(y*log2(x)) 

Функции exp2(x),log2(x) непосредственно реализуются в FPU . Если вы хотите внедрить бонусы, они также могут быть оценены базовыми операторами с использованием предварительно вычисленной таблицы sqrt-полномочий, например:

 2^1/2, 2^1/4, 2^1/8, 2^1/16, 2^1/32 ... 

ускорить процесс

  • Вращение точки вокруг другой точки (2D)
  • найти единственный непарный элемент в массиве
  • Количество отсчетов 1 в двоичном представлении
  • Сложность выполнения таблицы hash-таблицы (вставка, поиск и удаление)
  • Как найти все разделы набора
  • Проверьте, является ли одно целое число целым числом другого
  • алгоритм проверки соединения четырех полей
  • Как создать trie в c #
  • Симметричный биективный алгоритм для целых чисел
  • Сортировка последовательности путем замены соседних элементов с использованием минимальных свопов
  • Как создать комбинации нескольких векторов без контуров жесткого кодирования в C ++?
  • Давайте будем гением компьютера.