Ошибка при сравнении возведения в степень OverflowError: math range error
Написал программу, которая проверяет числа воздведенные в степень, но столкнулся с проблемой
import math
def compare_powers(n1,n2):
x1, x2 = n1[0], n1[1]
y1, y2 = n2[0], n2[1]
if math.pow(x1,x2) == math.pow(y1,y2):
return 0
elif math.pow(x1,x2) > math.pow(y1,y2):
return -1
else:
return 1
compare_powers([412222404,855201893], [205914948,950778202])
Я получаю такую ошибку:
OverflowError: math range error
А на codewars не работает, пишет Execution Timed Out, хотя это значения, которые в аргументах функции с их сайта
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Тупое сравнение по количеству цифр, требуемое для записи результата в двоичной системе счисления.
from math import log2
def compare_powers(n1,n2):
a = n1[1]*log2(n1[0])
b = n2[1]*log2(n2[0])
if a > b: return -1
elif a < b: return 1
else: return 0
В случае равенства, по хорошему, надо сравнивать уже значения.
Но в случае Codewars (если это эта задача) - проходит и так. :)