math_functions.nbt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. # sqrt
  2. assert_eq(sqrt(0), 0)
  3. assert_eq(sqrt(1), 1)
  4. assert_eq(sqrt(4), 2)
  5. assert_eq(sqrt(0 m²), 0 m)
  6. assert_eq(sqrt(1 m²), 1 m)
  7. assert_eq(sqrt(4 m²), 2 m)
  8. # sqr
  9. assert_eq(sqr(0), 0)
  10. assert_eq(sqr(1), 1)
  11. assert_eq(sqr(4), 16)
  12. assert_eq(sqr(0 m), 0 m²)
  13. assert_eq(sqr(1 m), 1 m²)
  14. assert_eq(sqr(4 m), 16 m²)
  15. # exp
  16. assert_eq(exp(0), 1)
  17. assert_eq(exp(1), e)
  18. assert_eq(exp(2), e * e, 1e-8)
  19. # ln/log
  20. assert_eq(ln(1), 0)
  21. assert_eq(ln(e), 1)
  22. assert_eq(ln(e * e), 2, 1e-8)
  23. assert_eq(log(1), 0)
  24. assert_eq(log(e), 1)
  25. assert_eq(log(e * e), 2, 1e-8)
  26. # log10
  27. assert_eq(log10(1), 0)
  28. assert_eq(log10(10), 1)
  29. assert_eq(log10(100), 2)
  30. # log2
  31. assert_eq(log2(1), 0)
  32. assert_eq(log2(2), 1)
  33. assert_eq(log2(4), 2)
  34. assert_eq(log2(1024), 10)
  35. # sin, cos, tan
  36. assert_eq(sin(0), 0, 1e-8)
  37. assert_eq(sin(π / 2), 1, 1e-8)
  38. assert_eq(sin(π), 0, 1e-8)
  39. assert_eq(cos(0), 1, 1e-8)
  40. assert_eq(cos(π / 2), 0, 1e-8)
  41. assert_eq(cos(π), -1, 1e-8)
  42. assert_eq(tan(0), 0, 1e-8)
  43. assert_eq(tan(π / 4), 1, 1e-8)
  44. # asin, acos, atan
  45. assert_eq(asin(0), 0, 1e-8)
  46. assert_eq(asin(1), π / 2, 1e-8)
  47. assert_eq(acos(0), π / 2, 1e-8)
  48. assert_eq(acos(1), 0, 1e-8)
  49. assert_eq(atan(0), 0, 1e-8)
  50. assert_eq(atan(1), π / 4, 1e-8)
  51. # atan2
  52. assert_eq(atan2(0, 1), 0, 1e-8)
  53. assert_eq(atan2(1, 0), π / 2, 1e-8)
  54. assert_eq(atan2(0, -1), π, 1e-8)
  55. assert_eq(atan2(-1, 0), -π / 2, 1e-8)
  56. # sinh, cosh, tanh
  57. assert_eq(sinh(0), 0, 1e-8)
  58. assert_eq(sinh(1), (e - 1 / e) / 2, 1e-8)
  59. assert_eq(cosh(0), 1, 1e-8)
  60. assert_eq(cosh(1), (e + 1 / e) / 2, 1e-8)
  61. assert_eq(tanh(0), 0, 1e-8)
  62. assert_eq(tanh(1), (e * e - 1) / (e * e + 1), 1e-8)
  63. # asinh, acosh, atanh
  64. assert_eq(asinh(0), 0, 1e-8)
  65. assert_eq(asinh(1), ln(1 + sqrt(2)), 1e-8)
  66. assert_eq(acosh(1), 0, 1e-8)
  67. assert_eq(acosh(2), ln(2 + sqrt(3)), 1e-8)
  68. assert_eq(atanh(0), 0, 1e-8)
  69. assert_eq(atanh(0.5), 0.549_306_144, 1e-8)
  70. # gamma
  71. assert_eq(gamma(1), 1)
  72. assert_eq(gamma(2), 1)
  73. assert_eq(gamma(2.5), 1.329_340_388, 1e-8)
  74. assert_eq(gamma(3), 2)
  75. assert_eq(gamma(4), 6)
  76. # factorial
  77. assert_eq(factorial(0), 1)
  78. assert_eq(factorial(1), 1)
  79. assert_eq(factorial(2), 2)
  80. assert_eq(factorial(3), 6)
  81. assert_eq(factorial(4), 24)
  82. assert_eq(factorial(20), 2432902008176640000)
  83. # falling factorial
  84. assert_eq(falling_factorial(0, 0), 1)
  85. assert_eq(falling_factorial(1, 0), 1)
  86. assert_eq(falling_factorial(2, 0), 1)
  87. assert_eq(falling_factorial(42.5, 0), 1)
  88. assert_eq(falling_factorial(0, 1), 0)
  89. assert_eq(falling_factorial(1, 1), 1)
  90. assert_eq(falling_factorial(2, 1), 2)
  91. assert_eq(falling_factorial(42.5, 1), 42.5)
  92. assert_eq(falling_factorial(0, 2), 0)
  93. assert_eq(falling_factorial(1, 2), 0)
  94. assert_eq(falling_factorial(2, 2), 2)
  95. assert_eq(falling_factorial(42.5, 2), 1763.75)
  96. assert_eq(falling_factorial(4, 0), 1)
  97. assert_eq(falling_factorial(4, 1), 4)
  98. assert_eq(falling_factorial(4, 2), 12)
  99. assert_eq(falling_factorial(4, 3), 24)
  100. assert_eq(falling_factorial(4, 4), 24)
  101. assert_eq(falling_factorial(4, 5), 0)
  102. assert_eq(falling_factorial(4, 6), 0)
  103. assert_eq(falling_factorial(20, 0), 1)
  104. assert_eq(falling_factorial(20, 1), 20)
  105. assert_eq(falling_factorial(20, 2), 380)
  106. assert_eq(falling_factorial(20, 20), 2432902008176640000)
  107. assert_eq(falling_factorial(20, 21), 0)
  108. # binomial coefficient
  109. assert_eq(binom(0, -1), 0)
  110. assert_eq(binom(0, 0), 1)
  111. assert_eq(binom(0, 1), 0)
  112. assert_eq(binom(1, -1), 0)
  113. assert_eq(binom(1, 0), 1)
  114. assert_eq(binom(1, 1), 1)
  115. assert_eq(binom(1, 2), 0)
  116. assert_eq(binom(2, -1), 0)
  117. assert_eq(binom(2, 0), 1)
  118. assert_eq(binom(2, 1), 2)
  119. assert_eq(binom(2, 2), 1)
  120. assert_eq(binom(2, 3), 0)
  121. assert_eq(binom(3, -1), 0)
  122. assert_eq(binom(3, 0), 1)
  123. assert_eq(binom(3, 1), 3)
  124. assert_eq(binom(3, 2), 3)
  125. assert_eq(binom(3, 3), 1)
  126. assert_eq(binom(3, 4), 0)
  127. assert_eq(binom(4, -1), 0)
  128. assert_eq(binom(4, 0), 1)
  129. assert_eq(binom(4, 1), 4)
  130. assert_eq(binom(4, 2), 6)
  131. assert_eq(binom(4, 3), 4)
  132. assert_eq(binom(4, 4), 1)
  133. assert_eq(binom(4, 5), 0)
  134. assert_eq(binom(1.5, -1), 0)
  135. assert_eq(binom(1.5, 0), 1)
  136. assert_eq(binom(1.5, 1), 1.5)
  137. assert_eq(binom(1.5, 2), 0.375)
  138. assert_eq(binom(1.5, 3), -0.0625)
  139. assert_eq(binom(1.5, 4), 0.0234375)
  140. # combinatoric sequences
  141. assert_eq(fibonacci(0), 0)
  142. assert_eq(fibonacci(1), 1)
  143. assert_eq(fibonacci(5), 5)
  144. assert_eq(lucas(0), 2)
  145. assert_eq(lucas(1), 1)
  146. assert_eq(lucas(5), 11)
  147. assert_eq(catalan(0), 1)
  148. assert_eq(catalan(1), 1)
  149. assert_eq(catalan(5), 42)
  150. # maximum
  151. assert_eq(maximum([1]), 1)
  152. assert_eq(maximum([1, 3]), 3)
  153. assert_eq(maximum([3, 1]), 3)
  154. assert_eq(maximum([100 cm, 3 m]), 3 m)
  155. # minimum
  156. assert_eq(minimum([1]), 1)
  157. assert_eq(minimum([1, 3]), 1)
  158. assert_eq(minimum([3, 1]), 1)
  159. assert_eq(minimum([100 cm, 3 m]), 100 cm)
  160. # mean
  161. assert_eq(mean([]), 0)
  162. assert_eq(mean([1]), 1)
  163. assert_eq(mean([1, 3]), 2)
  164. assert_eq(mean([1 m, 300 cm]), 2 m)
  165. # variance
  166. assert_eq(variance([]), 0)
  167. assert_eq(variance([1]), 0)
  168. assert_eq(variance([1, 1, 1, 1]), 0)
  169. assert_eq(variance([1, 2, 3, 4, 5]), 2.0)
  170. assert_eq(variance([1, -1, 1, -1]), 1.0)
  171. assert_eq(variance([-2, -4, -6, -8]), 5.0)
  172. # standard deviation
  173. assert_eq(stdev([]), 0)
  174. assert_eq(stdev([1]), 0)
  175. assert_eq(stdev([1, 1, 1, 1]), 0)
  176. assert_eq(stdev([1, 2, 3, 4, 5]), sqrt(2.0))
  177. # median
  178. assert_eq(median([1]), 1)
  179. assert_eq(median([1, 2]), 1.5)
  180. assert_eq(median([1, 2, 3]), 2)
  181. assert_eq(median([1, 2, 3, 4]), 2.5)
  182. assert_eq(median([1, 2, 3, 4, 5]), 3)
  183. # gcd
  184. assert_eq(gcd(0, 0), 0)
  185. assert_eq(gcd(0, 1), 1)
  186. assert_eq(gcd(1, 0), 1)
  187. assert_eq(gcd(1, 1), 1)
  188. assert_eq(gcd(2, 3), 1)
  189. assert_eq(gcd(2, 4), 2)
  190. assert_eq(gcd(3, 6), 3)
  191. assert_eq(gcd(4, 6), 2)
  192. assert_eq(gcd(4, 8), 4)
  193. assert_eq(gcd(6, 35), 1)
  194. assert_eq(gcd(1071, 462), 21)
  195. assert_eq(gcd(-8, 4), 4)
  196. assert_eq(gcd(-8, -4), 4)
  197. assert_eq(gcd(8, -4), 4)
  198. # lcm
  199. assert_eq(lcm(1, 1), 1)
  200. assert_eq(lcm(2, 3), 6)
  201. assert_eq(lcm(2, 4), 4)
  202. assert_eq(lcm(3, 6), 6)
  203. assert_eq(lcm(21, 6), 42)
  204. assert_eq(lcm(-8, 4), 8)
  205. assert_eq(lcm(8, -4), 8)
  206. # hypot2, hypot3
  207. assert_eq(hypot2(3, 4), 5)
  208. assert_eq(hypot2(3 m, 4 m), 5 m)
  209. assert_eq(hypot3(8, 9, 12), 17)
  210. assert_eq(hypot3(8 m, 9 m, 12 m), 17 m)
  211. # circle_area, circle_circumference, sphere_area, sphere_volume
  212. assert_eq(circle_area(2 m), 4 π m²)
  213. assert_eq(circle_circumference(2 m), 4 π m)
  214. assert_eq(sphere_area(2 m), 16 π m²)
  215. assert_eq(sphere_volume(2 m), 32/3 * π m³)