0
0 комментариев

пытаюсь ускорить выполнение базовых тригонометрических функций.
пока вывел только на 125%
советы и примеры по оптимизации?

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import timeit
import math
dbg = 1
def frange(start, stop, ndigt=1):
    ''' создание range с возможностью использовать float в шаге '''
    r = float(start)
    ret = []
    st = float(stop)+round(1./10**ndigt,ndigt)
    if start < stop:
        while r <= st:
            r1 = round(r,ndigt)
            ret.append(r1)
            r += round(1./10**ndigt,ndigt)
        return ret
 
 
def prepare_trigon(pcos, psin, ptan, ndig=4):
    ''' подготовка предварительно просчитанных значений sin cos tan
        для предотвращения перерасчетов
        ndig <- количество знаков после запятой'''
 
    if dbg: print "подготовка тригонометрических функций (sin,cos,tan) с глубиной ", ndig
    trig_range = frange(-math.pi, math.pi, ndig)  # todo подобрать значение десятичной
    for i in trig_range:
        pcos[i]= math.cos(i)
        psin[i]= math.sin(i)
        ptan[i]= math.tan(i)
 
 
start = timeit.default_timer()
pcos, psin, ptan = {}, {}, {},
prepare_trigon(pcos, psin, ptan, 4)
t =  (timeit.default_timer() - start )
print 'Подготовка заняла ', t
it = 1000000
tm = 0.2345
d = 4
start = timeit.default_timer()
for i in range(it):
    a = math.cos(tm)
    b = math.sin(tm)
    c = math.tan(tm)
 
t1 =  (timeit.default_timer() - start )
print '\nВычисление ',it," операций MATH заняло - ", t1
 
start = timeit.default_timer()
for i in range(it):
    b = pcos[tm]
    b = psin[tm]
    b = ptan[tm]
t2 = (timeit.default_timer() - start )
print 'Вычисление ',it," операций PREP заняло - ", t2
print '\nОтношение скорости = ', round(t1/t2,4)*100,"%"


Добавить комментарий