Skip to content

Added iterative solution for power calculation #12709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

86 changes: 86 additions & 0 deletions maths/power_using_iteration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
def power(base: float, exponent: int) -> float:
"""
Optimized power function using exponentiation by squaring.

Args:
base (float): The base number.
exponent (int): The exponent.

Returns:
float: The result of base raised to the power of exponent.

Examples:
>>> power(2, 3)
8.0
>>> power(5, -2)
0.04
>>> power(10, 0)
1.0
>>> power(7, 2)
49.0
>>> power(2, -3)
0.125
>>> power(2.5, 4)
39.0625
>>> power(-3.5, 2)
12.25
>>> power(-2, 3)
-8.0
>>> power(0, 5)
0.0
>>> power(0, 1)
0.0
>>> power(0, -1)
Traceback (most recent call last):
...
ZeroDivisionError: 0.0 cannot be raised to a negative power.
>>> power(0, 0)
Traceback (most recent call last):
...
ValueError: 0.0 raised to the power of 0 is indeterminate.
>>> power(1, 1000)
1.0

"""
if base == 0 and exponent == 0:
raise ValueError("0.0 raised to the power of 0 is indeterminate.")
if base == 0 and exponent < 0:
raise ZeroDivisionError("0.0 cannot be raised to a negative power.")

result = 1.0
if exponent < 0:
base = 1 / base
exponent = -exponent
while exponent:
if exponent % 2 == 1:
result *= base
base *= base # Square the base
exponent //= 2 # Halve the exponent
return round(result, 5) # Round to 5 decimal places


if __name__ == "__main__":
import doctest

doctest.testmod()
print("Raise base to the power of exponent using an optimized approach...")

try:
# Input handling and validation
base = float(input("Enter the base: ").strip()) # Supports float & int
exponent = int(
input("Enter the exponent: ").strip()
) # Ensures exponent is an integer

# Calculate result
result = power(base, exponent)

# Display the result
print(f"{base} to the power of {exponent} is {result}")

except ValueError as e:
# Handle invalid input or indeterminate cases
print(e)
except ZeroDivisionError as e:
# Handle division by zero
print(e)