PageRenderTime 25ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/runtime/ext/ext_math.h

https://github.com/diegoIta/hiphop-php
C Header | 106 lines | 73 code | 14 blank | 19 comment | 0 complexity | 83fd09fc728af77de11dd95f71b79303 MD5 | raw file
  1. /*
  2. +----------------------------------------------------------------------+
  3. | HipHop for PHP |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 2010 Facebook, Inc. (http://www.facebook.com) |
  6. | Copyright (c) 1997-2010 The PHP Group |
  7. +----------------------------------------------------------------------+
  8. | This source file is subject to version 3.01 of the PHP license, |
  9. | that is bundled with this package in the file LICENSE, and is |
  10. | available through the world-wide-web at the following url: |
  11. | http://www.php.net/license/3_01.txt |
  12. | If you did not receive a copy of the PHP license and are unable to |
  13. | obtain it through the world-wide-web, please send a note to |
  14. | license@php.net so we can mail you a copy immediately. |
  15. +----------------------------------------------------------------------+
  16. */
  17. #ifndef __EXT_MATH_H__
  18. #define __EXT_MATH_H__
  19. #include <runtime/base/base_includes.h>
  20. #include <runtime/base/zend/zend_string.h>
  21. #include <runtime/base/zend/zend_math.h>
  22. #include <math.h>
  23. namespace HPHP {
  24. ///////////////////////////////////////////////////////////////////////////////
  25. inline double f_pi() { return k_M_PI;}
  26. Variant f_min(int _argc, CVarRef value, CArrRef _argv = null_array);
  27. Variant f_max(int _argc, CVarRef value, CArrRef _argv = null_array);
  28. Variant f_abs(CVarRef number);
  29. inline bool f_is_finite(double val) { return finite(val);}
  30. inline bool f_is_infinite(double val) { return isinf(val);}
  31. inline bool f_is_nan(double val) { return isnan(val);}
  32. inline double f_ceil(double value) { return ceil(value);}
  33. inline double f_floor(double value) { return floor(value);}
  34. double f_round(CVarRef val, int64 precision = 0);
  35. inline double f_deg2rad(double number) { return number / 180.0 * k_M_PI;}
  36. inline double f_rad2deg(double number) { return number / k_M_PI * 180.0;}
  37. // departure from PHP: not using "double" for these conversions
  38. inline String f_decbin(int64 number) {
  39. return String(string_long_to_base(number, 2), AttachString);
  40. }
  41. inline String f_dechex(int64 number) {
  42. return String(string_long_to_base(number, 16), AttachString);
  43. }
  44. inline String f_decoct(int64 number) {
  45. return String(string_long_to_base(number, 8), AttachString);
  46. }
  47. inline Variant f_bindec(CStrRef binary_string) {
  48. return string_base_to_numeric(binary_string.data(), binary_string.size(), 2);
  49. }
  50. inline Variant f_hexdec(CStrRef hex_string) {
  51. return string_base_to_numeric(hex_string.data(), hex_string.size(), 16);
  52. }
  53. inline Variant f_octdec(CStrRef octal_string) {
  54. return string_base_to_numeric(octal_string.data(), octal_string.size(), 8);
  55. }
  56. Variant f_base_convert(CStrRef number, int64 frombase, int64 tobase);
  57. Numeric f_pow(CVarRef base, CVarRef exp);
  58. inline double f_exp(double arg) { return exp(arg);}
  59. inline double f_expm1(double arg) { return expm1(arg);}
  60. inline double f_log10(double arg) { return log10(arg);}
  61. inline double f_log1p(double number) { return log1p(number);}
  62. inline double f_log(double arg, double base = 0) {
  63. return base <= 0 ? log(arg) : log(arg)/log(base);
  64. }
  65. inline double f_cos(double arg) { return cos(arg); }
  66. inline double f_cosh(double arg) { return cosh(arg); }
  67. inline double f_sin(double arg) { return sin(arg); }
  68. inline double f_sinh(double arg) { return sinh(arg); }
  69. inline double f_tan(double arg) { return tan(arg); }
  70. inline double f_tanh(double arg) { return tanh(arg); }
  71. inline double f_acos(double arg) { return acos(arg); }
  72. inline double f_acosh(double arg) { return acosh(arg);}
  73. inline double f_asin(double arg) { return asin(arg); }
  74. inline double f_asinh(double arg) { return asinh(arg);}
  75. inline double f_atan(double arg) { return atan(arg); }
  76. inline double f_atanh(double arg) { return atanh(arg);}
  77. inline double f_atan2(double y, double x) { return atan2(y, x);}
  78. inline double f_hypot(double x, double y) { return hypot(x, y);}
  79. inline double f_fmod(double x, double y) { return fmod(x, y);}
  80. inline double f_sqrt(double arg) { return sqrt(arg);}
  81. inline int64 f_getrandmax() { return RAND_MAX;}
  82. void f_srand(CVarRef seed = null_variant);
  83. int64 f_rand(int64 min = 0, int64 max = RAND_MAX);
  84. inline int64 f_mt_getrandmax() { return MT_RAND_MAX;}
  85. void f_mt_srand(CVarRef seed = null_variant);
  86. inline int64 f_mt_rand(int64 min = 0, int64 max = RAND_MAX) {
  87. return math_mt_rand(min, max);
  88. }
  89. inline double f_lcg_value() { return math_combined_lcg();}
  90. ///////////////////////////////////////////////////////////////////////////////
  91. }
  92. #endif // __EXT_MATH_H__