Я программирую библиотеку для произвольной арифметики точности. Последней проблемой, с которой я столкнулся, является функция мощности. Я решил вычислить 2^(y log2(x))
вместо x^y
и остается одна подзадача: как я могу эффективно вычислить 2^x
с x
в диапазоне (0,1)
(ноль и один исключены).Численное приближение 2^x
Поскольку я, очевидно, храню рациональные методы, x
имеет форму p/q
(p < q
). Поэтому я мог бы вычислить q
-й корень 2
(алгоритм n-го корня Wikipedia https://en.wikipedia.org/wiki/Nth_root_algorithm), а затем проинформировать результат на p
.
Однако это кажется очень неэффективным. Есть ли какой-либо превосходный алгоритм? Спасибо за вашу помощь.
Если вы думаете больше об этом, вы обнаружите, почему естественный логарифм называется естественным. Нет смысла основывать все на 2. 'exp (y * ln (x))' имеет меньше констант. - Изучите [bc libmath] (http://www.rkeene.org/viewer/devel/old/bc-dos/bc/libmath.b.htm) для доказанной реализации этих функций. – LutzL
см. [Power by squaring for negative exponents] (http://stackoverflow.com/a/30962495/2521214) для основ, а затем сублинсы для более продвинутых материалов, в частности, «fixed point bignum pow» – Spektre