diff --git a/math/binary_exponentiation.py b/math/binary_exponentiation.py new file mode 100644 index 0000000..aa0f165 --- /dev/null +++ b/math/binary_exponentiation.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + +``` +Binary exponentiation, also known as exponentiation by squaring, is a technique for +efficiently computing the power of a number. By repeatedly squaring x and halving n, +we can quickly compute x^n using a logarithmic number of multiplications. +```` + +def binary_exp(x: float, n: int) -> float: + + if n == 0: + return 1 + + if n < 0: + return 1.0 / binary_exp(x, -1 * n) + + if n % 2 == 1: + return x * binary_exp(x * x, (n - 1) // 2) + + return binary_exp(x * x, n // 2)