17 #if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \
22 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
27 #define Need_Float(x) do {if (!RB_TYPE_P(x, T_FLOAT)) {(x) = rb_to_float(x);}} while(0)
28 #define Need_Float2(x,y) do {\
33 #define domain_error(msg) \
34 rb_raise(rb_eMathDomainError, "Numerical argument is out of domain - " #msg)
60 # define M_PI 3.14159265358979323846
66 if (dx == 0.0 && dy == 0.0) {
183 return (exp(x) + exp(-x)) / 2;
206 return (exp(x) - exp(-x)) / 2;
324 #if defined __CYGWIN__
325 # include <cygwin/version.h>
326 # if CYGWIN_VERSION_DLL_MAJOR < 1005
327 # define nan(x) nan()
329 # define log(x) ((x) < 0.0 ? nan("") : log(x))
330 # define log10(x) ((x) < 0.0 ? nan("") : log10(x))
375 return log10(x)/log10(2.0);
378 extern double log2(
double);
470 if (d0 == 0.0)
return DBL2NUM(0.0);
643 static const double fact_table[] = {
663 121645100408832000.0,
664 2432902008176640000.0,
665 51090942171709440000.0,
666 1124000727777607680000.0,
672 double intpart, fracpart;
677 fracpart = modf(d0, &intpart);
678 if (fracpart == 0.0) {
681 intpart - 1 < (
double)
numberof(fact_table)) {
682 return DBL2NUM(fact_table[(
int)intpart - 1]);
722 rb_math_##n(VALUE x)\
724 return math_##n(rb_mMath, x);\
729 rb_math_##n(VALUE x, VALUE y)\
731 return math_##n(rb_mMath, x, y);\
static VALUE math_asinh(VALUE obj, VALUE x)
RUBY_EXTERN double cbrt(double)
RUBY_EXTERN int signbit(double x)
static VALUE math_atan2(VALUE obj, VALUE y, VALUE x)
static VALUE math_atanh(VALUE obj, VALUE x)
VALUE rb_eMathDomainError
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
RUBY_EXTERN double tgamma(double)
static VALUE math_ldexp(VALUE obj, VALUE x, VALUE n)
RUBY_EXTERN double lgamma_r(double, int *)
static VALUE math_exp(VALUE obj, VALUE x)
VALUE rb_math_log(int argc, VALUE *argv)
static VALUE math_log10(VALUE obj, VALUE x)
void rb_define_const(VALUE, const char *, VALUE)
RUBY_EXTERN double erfc(double)
static VALUE math_tanh(VALUE obj, VALUE x)
RUBY_EXTERN int isinf(double)
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
static VALUE math_sqrt(VALUE obj, VALUE x)
RUBY_EXTERN double atanh(double)
#define Need_Float2(x, y)
RUBY_EXTERN double hypot(double, double)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static VALUE math_erf(VALUE obj, VALUE x)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
static VALUE math_log(int argc, VALUE *argv)
#define domain_error(msg)
RUBY_EXTERN double asinh(double)
static VALUE math_cos(VALUE obj, VALUE x)
static VALUE math_acos(VALUE obj, VALUE x)
static VALUE math_atan(VALUE obj, VALUE x)
static VALUE math_erfc(VALUE obj, VALUE x)
static VALUE math_acosh(VALUE obj, VALUE x)
static VALUE math_cbrt(VALUE obj, VALUE x)
static VALUE math_log2(VALUE obj, VALUE x)
static VALUE math_frexp(VALUE obj, VALUE x)
RUBY_EXTERN double acosh(double)
static VALUE math_sin(VALUE obj, VALUE x)
static VALUE math_asin(VALUE obj, VALUE x)
static VALUE math_tan(VALUE obj, VALUE x)
VALUE rb_define_module(const char *name)
static VALUE math_gamma(VALUE obj, VALUE x)
static VALUE math_hypot(VALUE obj, VALUE x, VALUE y)
RUBY_EXTERN double erf(double)
static VALUE math_cosh(VALUE obj, VALUE x)
static VALUE math_lgamma(VALUE obj, VALUE x)
static VALUE math_sinh(VALUE obj, VALUE x)