pow.phpt 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. --TEST--
  2. Various pow() tests
  3. --FILE--
  4. <?php
  5. define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
  6. define('LONG_MIN', -LONG_MAX - 1);
  7. printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
  8. is_int(LONG_MIN-1),is_int(LONG_MAX+1));
  9. function epsilon_equal($left, $right): bool {
  10. return abs(($left-$right) / $left) < 1e-12;
  11. }
  12. var_dump(0.25 === pow(-2,-2));
  13. var_dump(-0.5 === pow(-2,-1));
  14. var_dump(1 === pow(-2, 0));
  15. var_dump(-2 === pow(-2, 1));
  16. var_dump(4 === pow(-2, 2));
  17. var_dump(1.0 === pow(-1,-2));
  18. var_dump(-1.0 === pow(-1,-1));
  19. var_dump(1 === pow(-1, 0));
  20. var_dump(-1 === pow(-1, 1));
  21. var_dump(1 === pow(-1, 2));
  22. var_dump(TRUE === is_infinite(pow(0,-2)));
  23. var_dump(TRUE === is_infinite(pow(0,-1)));
  24. var_dump(1 === pow( 0, 0));
  25. var_dump(0 === pow( 0, 1));
  26. var_dump(0 === pow( 0, 2));
  27. var_dump(1.0 === pow( 1,-2));
  28. var_dump(1.0 === pow( 1,-1));
  29. var_dump(1 === pow( 1, 0));
  30. var_dump(1 === pow( 1, 1));
  31. var_dump(1 === pow( 1, 2));
  32. var_dump(0.25 === pow( 2,-2));
  33. var_dump(0.5 === pow( 2,-1));
  34. var_dump(1 === pow( 2, 0));
  35. var_dump(2 === pow( 2, 1));
  36. var_dump(4 === pow( 2, 2));
  37. var_dump(0.25 === pow(-2,-2.0));
  38. var_dump(-0.5 === pow(-2,-1.0));
  39. var_dump(1.0 === pow(-2, 0.0));
  40. var_dump(-2.0 === pow(-2, 1.0));
  41. var_dump(4.0 === pow(-2, 2.0));
  42. var_dump(1.0 === pow(-1,-2.0));
  43. var_dump(-1.0 === pow(-1,-1.0));
  44. var_dump(1.0 === pow(-1, 0.0));
  45. var_dump(-1.0 === pow(-1, 1.0));
  46. var_dump(1.0 === pow(-1, 2.0));
  47. var_dump(TRUE === is_infinite(pow(0,-2.0)));
  48. var_dump(TRUE === is_infinite(pow(0,-1.0)));
  49. var_dump(1.0 === pow( 0, 0.0));
  50. var_dump(0.0 === pow( 0, 1.0));
  51. var_dump(0.0 === pow( 0, 2.0));
  52. var_dump(1.0 === pow( 1,-2.0));
  53. var_dump(1.0 === pow( 1,-1.0));
  54. var_dump(1.0 === pow( 1, 0.0));
  55. var_dump(1.0 === pow( 1, 1.0));
  56. var_dump(1.0 === pow( 1, 2.0));
  57. var_dump(0.25 === pow( 2,-2.0));
  58. var_dump(0.5 === pow( 2,-1.0));
  59. var_dump(1.0 === pow( 2, 0.0));
  60. var_dump(2.0 === pow( 2, 1.0));
  61. var_dump(4.0 === pow( 2, 2.0));
  62. var_dump(2147483648 === pow(2,31));
  63. var_dump(epsilon_equal( -2147483648, pow(-2,31) ));
  64. var_dump(1000000000 === pow(10,9));
  65. var_dump(100000000 === pow(-10,8));
  66. var_dump(1 === pow(-1,1443279822));
  67. var_dump(-1 === pow(-1,1443279821));
  68. var_dump(epsilon_equal( sqrt(2), pow(2,1/2) ));
  69. var_dump(0.25 === pow(-2.0,-2.0));
  70. var_dump(-0.5 === pow(-2.0,-1.0));
  71. var_dump(1.0 === pow(-2.0, 0.0));
  72. var_dump(-2.0 === pow(-2.0, 1.0));
  73. var_dump(4.0 === pow(-2.0, 2.0));
  74. var_dump(1.0 === pow(-1.0,-2.0));
  75. var_dump(-1.0 === pow(-1.0,-1.0));
  76. var_dump(1.0 === pow(-1.0, 0.0));
  77. var_dump(-1.0 === pow(-1.0, 1.0));
  78. var_dump(1.0 === pow(-1.0, 2.0));
  79. var_dump(TRUE === is_infinite(pow(0.0,-2.0)));
  80. var_dump(TRUE === is_infinite(pow(0.0,-1.0)));
  81. var_dump(1.0 === pow( 0.0, 0.0));
  82. var_dump(0.0 === pow( 0.0, 1.0));
  83. var_dump(0.0 === pow( 0.0, 2.0));
  84. var_dump(1.0 === pow( 1.0,-2.0));
  85. var_dump(1.0 === pow( 1.0,-1.0));
  86. var_dump(1.0 === pow( 1.0, 0.0));
  87. var_dump(1.0 === pow( 1.0, 1.0));
  88. var_dump(1.0 === pow( 1.0, 2.0));
  89. var_dump(0.25 === pow( 2.0,-2.0));
  90. var_dump(0.5 === pow( 2.0,-1.0));
  91. var_dump(1.0 === pow( 2.0, 0.0));
  92. var_dump(2.0 === pow( 2.0, 1.0));
  93. var_dump(4.0 === pow( 2.0, 2.0));
  94. var_dump(0.25 === pow(-2.0,-2));
  95. var_dump(-0.5 === pow(-2.0,-1));
  96. var_dump(1.0 === pow(-2.0, 0));
  97. var_dump(-2.0 === pow(-2.0, 1));
  98. var_dump(4.0 === pow(-2.0, 2));
  99. var_dump(1.0 === pow(-1.0,-2));
  100. var_dump(-1.0 === pow(-1.0,-1));
  101. var_dump(1.0 === pow(-1.0, 0));
  102. var_dump(-1.0 === pow(-1.0, 1));
  103. var_dump(1.0 === pow(-1.0, 2));
  104. var_dump(TRUE === is_infinite(pow( 0.0,-2)));
  105. var_dump(TRUE === is_infinite(pow( 0.0,-1)));
  106. var_dump(1.0 === pow( 0.0, 0));
  107. var_dump(0.0 === pow( 0.0, 1));
  108. var_dump(0.0 === pow( 0.0, 2));
  109. var_dump(1.0 === pow( 1.0,-2));
  110. var_dump(1.0 === pow( 1.0,-1));
  111. var_dump(1.0 === pow( 1.0, 0));
  112. var_dump(1.0 === pow( 1.0, 1));
  113. var_dump(1.0 === pow( 1.0, 2));
  114. var_dump(0.25 === pow( 2.0,-2));
  115. var_dump(0.5 === pow( 2.0,-1));
  116. var_dump(1.0 === pow( 2.0, 0));
  117. var_dump(2.0 === pow( 2.0, 1));
  118. var_dump(4.0 === pow( 2.0, 2));
  119. var_dump(2.0 === pow( 4, 0.5));
  120. var_dump(2.0 === pow( 4.0, 0.5));
  121. var_dump(3.0 === pow( 27, 1/3));
  122. var_dump(3.0 === pow(27.0, 1/3));
  123. var_dump(0.5 === pow( 4, -0.5));
  124. var_dump(0.5 === pow( 4.0, -0.5));
  125. var_dump(LONG_MAX-1 === pow(LONG_MAX-1,1));
  126. var_dump(LONG_MIN+1 === pow(LONG_MIN+1,1));
  127. var_dump(epsilon_equal( (LONG_MAX-1)*(LONG_MAX-1) , pow(LONG_MAX-1,2) ));
  128. var_dump(epsilon_equal( (LONG_MIN+1)*(LONG_MIN+1) , pow(LONG_MIN+1,2) ));
  129. var_dump((float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0));
  130. var_dump((float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0));
  131. var_dump(epsilon_equal( (LONG_MAX-1)*(LONG_MAX-1) , pow(LONG_MAX-1,2.0) ));
  132. var_dump(epsilon_equal( (LONG_MIN+1)*(LONG_MIN+1) , pow(LONG_MIN+1,2.0) ));
  133. var_dump(LONG_MAX === pow(LONG_MAX,1));
  134. var_dump(LONG_MIN === pow(LONG_MIN,1));
  135. var_dump(epsilon_equal( LONG_MAX*LONG_MAX , pow(LONG_MAX,2) ));
  136. var_dump(epsilon_equal( LONG_MIN*LONG_MIN , pow(LONG_MIN,2) ));
  137. var_dump((float)LONG_MAX === pow(LONG_MAX,1.0));
  138. var_dump((float)LONG_MIN === pow(LONG_MIN,1.0));
  139. var_dump(epsilon_equal( LONG_MAX*LONG_MAX , pow(LONG_MAX,2.0) ));
  140. var_dump(epsilon_equal( LONG_MIN*LONG_MIN , pow(LONG_MIN,2.0) ));
  141. ?>
  142. --EXPECT--
  143. 1,1,0,0
  144. bool(true)
  145. bool(true)
  146. bool(true)
  147. bool(true)
  148. bool(true)
  149. bool(true)
  150. bool(true)
  151. bool(true)
  152. bool(true)
  153. bool(true)
  154. bool(true)
  155. bool(true)
  156. bool(true)
  157. bool(true)
  158. bool(true)
  159. bool(true)
  160. bool(true)
  161. bool(true)
  162. bool(true)
  163. bool(true)
  164. bool(true)
  165. bool(true)
  166. bool(true)
  167. bool(true)
  168. bool(true)
  169. bool(true)
  170. bool(true)
  171. bool(true)
  172. bool(true)
  173. bool(true)
  174. bool(true)
  175. bool(true)
  176. bool(true)
  177. bool(true)
  178. bool(true)
  179. bool(true)
  180. bool(true)
  181. bool(true)
  182. bool(true)
  183. bool(true)
  184. bool(true)
  185. bool(true)
  186. bool(true)
  187. bool(true)
  188. bool(true)
  189. bool(true)
  190. bool(true)
  191. bool(true)
  192. bool(true)
  193. bool(true)
  194. bool(true)
  195. bool(true)
  196. bool(true)
  197. bool(true)
  198. bool(true)
  199. bool(true)
  200. bool(true)
  201. bool(true)
  202. bool(true)
  203. bool(true)
  204. bool(true)
  205. bool(true)
  206. bool(true)
  207. bool(true)
  208. bool(true)
  209. bool(true)
  210. bool(true)
  211. bool(true)
  212. bool(true)
  213. bool(true)
  214. bool(true)
  215. bool(true)
  216. bool(true)
  217. bool(true)
  218. bool(true)
  219. bool(true)
  220. bool(true)
  221. bool(true)
  222. bool(true)
  223. bool(true)
  224. bool(true)
  225. bool(true)
  226. bool(true)
  227. bool(true)
  228. bool(true)
  229. bool(true)
  230. bool(true)
  231. bool(true)
  232. bool(true)
  233. bool(true)
  234. bool(true)
  235. bool(true)
  236. bool(true)
  237. bool(true)
  238. bool(true)
  239. bool(true)
  240. bool(true)
  241. bool(true)
  242. bool(true)
  243. bool(true)
  244. bool(true)
  245. bool(true)
  246. bool(true)
  247. bool(true)
  248. bool(true)
  249. bool(true)
  250. bool(true)
  251. bool(true)
  252. bool(true)
  253. bool(true)
  254. bool(true)
  255. bool(true)
  256. bool(true)
  257. bool(true)
  258. bool(true)
  259. bool(true)
  260. bool(true)
  261. bool(true)
  262. bool(true)
  263. bool(true)
  264. bool(true)
  265. bool(true)
  266. bool(true)
  267. bool(true)
  268. bool(true)
  269. bool(true)
  270. bool(true)
  271. bool(true)
  272. bool(true)