fork download
  1. #!/usr/bin/env python
  2.  
  3. import numpy as np
  4.  
  5. def poly_eval(x, a):
  6. return sum([an*x**n for n,an in enumerate(a)])
  7.  
  8. def sqrt_1px(x):
  9. a = [1.0,
  10. 0.49959804148061,
  11. -0.12047308243453,
  12. 0.04585425015501,
  13. -0.01076564682800 ]
  14. return poly_eval(x, a)
  15.  
  16. def log2_1px(x):
  17. a = [0.0,
  18. 1.44254494359510,
  19. -0.7181452567504,
  20. 0.45754919692582,
  21. -0.27790534462866,
  22. 0.121797910687826,
  23. -0.02584144982967 ]
  24. return poly_eval(x, a)
  25.  
  26. def pow2x(x):
  27. a = [ 1.0,
  28. 0.69303212081966 ,
  29. 0.24137976293709,
  30. 0.05203236900844,
  31. 0.01355574723481 ]
  32. return poly_eval(x,a)
  33.  
  34. def sin_pi2x(x):
  35. a = [ 0.0,
  36. 1.57079632679490,
  37. 0.0,
  38. -0.64596406188166,
  39. 0.0,
  40. 0.07969158490912,
  41. 0.0,
  42. -0.00467687997706,
  43. 0.0,
  44. 0.00015303015470 ]
  45. return poly_eval(x, a)
  46.  
  47. def cos_pix(x):
  48. return 1 - 2*sin_pi2x(x)**2
  49.  
  50. if __name__ == '__main__':
  51. xp = np.linspace(0, 1, 1001)
  52. xn = np.linspace(-1, 0, 1001)
  53. x = np.linspace(-1, 1, 2001)
  54.  
  55. # sqrt(1+x)
  56. mae = np.max(np.abs(sqrt_1px(xp)-np.sqrt(1+xp)))
  57. print "sqrt(1+x)\nMaximum Absolute Error: %e\n" % mae
  58.  
  59. # log2(1+x)
  60. mae = np.max(np.abs(log2_1px(xp) - np.log2(1+xp)))
  61. print "log2(1+x)\nMaximum Absolute Error: %e\n" % mae
  62.  
  63. # 2^x
  64. mae = np.max(np.abs(pow2x(xp) - 2**xp))
  65. print "2^x\nMaximum Absolute Error: %e\n" % mae
  66.  
  67. # sin(pi/2*x)
  68. mae = np.max(np.abs(sin_pi2x(x) - np.sin(np.pi/2*x)))
  69. print "sin(pi/2*x)\nMaximum Absolute Error: %e\n" % mae
  70.  
  71. # cos(pi*x)
  72. mae = np.max(np.abs(cos_pix(x) - np.cos(np.pi*x)))
  73. print "cos(pi*x)\nMaximum Absolute Error: %e\n" % mae
  74.  
Success #stdin #stdout 0.12s 24184KB
stdin
Standard input is empty
stdout
sqrt(1+x)
Maximum Absolute Error: 1.489434e-05

log2(1+x)
Maximum Absolute Error: 2.216198e-06

2^x
Maximum Absolute Error: 6.312298e-06

sin(pi/2*x)
Maximum Absolute Error: 2.410459e-08

cos(pi*x)
Maximum Absolute Error: 9.613158e-08