File: test-martinheinz.py

package info (click to toggle)
scalene 1.5.51-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 15,528 kB
  • sloc: cpp: 22,930; python: 13,403; javascript: 11,769; ansic: 817; makefile: 196; sh: 45
file content (64 lines) | stat: -rwxr-xr-x 1,355 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from decimal import *

def exp(x):
    getcontext().prec += 2
    i, lasts, s, fact, num = 0, 0, 1, 1, 1
    while s != lasts:
        lasts = s
        i += 1
        fact *= i
        num *= x
        s += num / fact
    getcontext().prec -= 2
    print(+s)
    return +s

import time

start = time.time()

print("Original:")


d1_orig = exp(Decimal(150))
d2_orig = exp(Decimal(400))
d3_orig = exp(Decimal(3000))

elapsed_original = time.time() - start

print("Elapsed time, original (s):  ", elapsed_original)

def exp_opt(x):
    getcontext().prec += 2
    i, lasts, s, fact, num = 0, 0, 1, 1, 1
    nf = Decimal(1) ### = num / fact
    while s != lasts:
        lasts = s
        i += 1
        # was: fact *= i
        # was: num *= x
        nf *= (x / i) ### update nf to be num / fact
        s += nf ### was: s += num / fact
    getcontext().prec -= 2
    print(+s)
    return +s

start = time.time()

print("Optimized:")

d1_opt = exp_opt(Decimal(150))
d2_opt = exp_opt(Decimal(400))
d3_opt = exp_opt(Decimal(3000))

elapsed_optimized = time.time() - start

print("Elapsed time, optimized (s): ", elapsed_optimized)
print("Improvement: ", elapsed_original / elapsed_optimized)

assert d1_orig == d1_opt
assert d2_orig == d2_opt
assert d3_orig == d3_opt

print("All equivalent? ", d1_orig == d1_opt and d2_orig == d2_opt and d3_orig == d3_opt)