Advertisement
Pietu1998

Golfed square root

Dec 6th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.20 KB | None | 0 0
  1. # More efficient, 58 bytes (+ function name)
  2.  
  3. def square_root(x,i):
  4.  v=x
  5.  while(v*v-x)*i:v=v/2+x/v/2;i-=1
  6.  return v
  7.  
  8. # Inefficient, 51 bytes (+ function name)
  9.  
  10. def square_root_b(x,i):
  11.  v=x
  12.  while i:v=v/2+x/v/2;i-=1
  13.  return v
  14.  
  15. # Benchmark
  16.  
  17. import time, math
  18. size = 10000
  19. r = range(1, size + 1)
  20. a = [0] * (size + 1)
  21. b = [0] * (size + 1)
  22. # Processor warmup
  23. print("Warming up...", end = "")
  24. for i in r:
  25.     square_root(i, 1000)
  26.     square_root_b(i, 1000)
  27. print("Done")
  28. # Efficient method
  29. print("Benchmarking efficient method...", end = "")
  30. time_a = time.perf_counter()
  31. for i in r:
  32.     a[i] = square_root(i, 1000)
  33. time_b = time.perf_counter()
  34. print("Done")
  35. # Inefficient method
  36. print("Benchmarking inefficient method...", end = "")
  37. time_c = time.perf_counter()
  38. for i in r:
  39.     b[i] = square_root_b(i, 1000)
  40. time_d = time.perf_counter()
  41. print("Done")
  42. # Result
  43. err_a = 0
  44. err_b = 0
  45. for i in r:
  46.     err_a += abs(a[i] - math.sqrt(i))
  47.     err_b += abs(b[i] - math.sqrt(i))
  48. print("Efficient method:   %d roots in %.3fms, total error %.8f" % (size, (time_b - time_a) * 1000, err_a))
  49. 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