Ошибка при сравнении возведения в степень 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 (если это эта задача) - проходит и так. :)

→ Ссылка