/* * Copyright (c) 2022, Leon Albrecht * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace AK { template constexpr I pow(I base, I exponent) { // https://en.wikipedia.org/wiki/Exponentiation_by_squaring if (exponent < 0) return 0; if (exponent == 0) return 1; I res = 1; while (exponent > 0) { if (exponent & 1) res *= base; base *= base; exponent /= 2u; } return res; } }