[python] как быстро сделать decimal*100 -> int
begin = datetime.now
a = Decimal('1.45434')
for i in range(1000000):
ip,fp = str(a).split('.')
#if len(fp)< DPREC
b = int(ip)* PREC + int(fp)
end = datetime.now
print 'delta: %s' % (end-begin)
delta: 0:00:05.219000
begin = datetime.now
a = Decimal('1.45434')
for i in range(1000000):
b = a._int
end = datetime.now
delta: 0:00:00.172000
ускорение в 100раз.
Правда непонятно, в чём тормознутость int (d* 100)
умножение - умножение d._int
округление d._int / 10** (-d._exp)
ну всяко должно быть быстрее, чем разбор строки.
Оставить комментарий
Phoenix
main:
delta: 0:00:23.672000
delta: 0:00:04.750000
Прилично. Учитывая, что операция будет выполняться где-то 1000 раз в секунду, получается, что первый способ занимает 1/43 всего времени. А ему как-то нужно другим, более важным заниматься.
вторая фукнция показывает, что при любом DPREC, получает неточность из-за округления.
Данные получаю через стороннюю библиотеку, они присылает их в Decimal, так что от него не уйти.
Вопрос такой, как можно соптимизировать?