модуль timeit зависает с большими значениями pow ()

Я пытаюсь рассчитать время, затрачиваемое функцией pow для вычисления экспоненциального модуля. Если значения g, x, p жестко запрограммированы, код выдает ошибку, а при значениях, помещенных в функцию pow, код зависает. Один и тот же фрагмент кода работает эффективно, когда я использую time () и clock () для расчета времени, затрачиваемого на этот фрагмент кода. Мне нужна была точность, и для этого я перешел к модулю timeit после тестирования с функциями clock () и time ().

Код отлично работает с небольшими значениями, такими как pow (2, 3, 5), что имеет смысл. как я могу повысить эффективность расчета времени с помощью модуля timeit.

Также я новичок в Python, простите меня, если в коде есть глупая ошибка.

import math
import random
import hashlib
import time
from timeit import Timer

g = 141802876407053547664378835005750805370737584038368838959151050908654130616798415530564917923311706921535439557793280725844349256960807398107370211978304
x = 1207729835787890214
p = 4870352607375058055471602136317178172283784073796673298937466544646468718314482464390112574915498953621226853454222898392076852427324057496200810018794472


t = Timer('pow(g,x,p)', 'import math')

z = t.timeit()
print ('the value of z is: '), z

Спасибо


person fahad    schedule 29.06.2010    source источник


Ответы (1)


Здесь есть две проблемы:

  1. Вы не можете напрямую получить доступ к глобальным объектам из timeit: см. это вопрос. Вы можете использовать это, чтобы исправить ошибку:

    t = Timer('pow(g,x,p)', 'from __main__ import g,x,p')
    

    Или просто введите числовые значения прямо в строку.

  2. По умолчанию модуль timeit выполняет 1000000 итераций, что здесь займет слишком много времени. Вы можете изменить количество итераций, например:

    z = t.timeit(1000)
    

    Это предотвратит то, что кажется зависанием (но на самом деле это просто очень долгий расчет).

person interjay    schedule 29.06.2010
comment
+1 - быстрее меня и лучше сформулировано. Теперь изящно кланяюсь :) - person Tim Pietzcker; 29.06.2010