Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # More efficient, 58 bytes (+ function name)
- def square_root(x,i):
- v=x
- while(v*v-x)*i:v=v/2+x/v/2;i-=1
- return v
- # Inefficient, 51 bytes (+ function name)
- def square_root_b(x,i):
- v=x
- while i:v=v/2+x/v/2;i-=1
- return v
- # Benchmark
- import time, math
- size = 10000
- r = range(1, size + 1)
- a = [0] * (size + 1)
- b = [0] * (size + 1)
- # Processor warmup
- print("Warming up...", end = "")
- for i in r:
- square_root(i, 1000)
- square_root_b(i, 1000)
- print("Done")
- # Efficient method
- print("Benchmarking efficient method...", end = "")
- time_a = time.perf_counter()
- for i in r:
- a[i] = square_root(i, 1000)
- time_b = time.perf_counter()
- print("Done")
- # Inefficient method
- print("Benchmarking inefficient method...", end = "")
- time_c = time.perf_counter()
- for i in r:
- b[i] = square_root_b(i, 1000)
- time_d = time.perf_counter()
- print("Done")
- # Result
- err_a = 0
- err_b = 0
- for i in r:
- err_a += abs(a[i] - math.sqrt(i))
- err_b += abs(b[i] - math.sqrt(i))
- print("Efficient method: %d roots in %.3fms, total error %.8f" % (size, (time_b - time_a) * 1000, err_a))
- print("Inefficient method: %d roots in %.3fms, total error %.8f" % (size, (time_d - time_c) * 1000, err_b))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement