13 # define _USE_MATH_DEFINES 1 20 #if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \ 25 #define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM) 30 #define Get_Double(x) rb_num_to_dbl(x) 32 #define domain_error(msg) \ 33 rb_raise(rb_eMathDomainError, "Numerical argument is out of domain - " #msg) 71 if (dx == 0.0 && dy == 0.0) {
82 const double dz = (3.0 *
M_PI / 4.0);
86 const double dz = (
M_PI / 4.0);
230 return (exp(x) + exp(-x)) / 2;
258 return (exp(x) - exp(-x)) / 2;
286 # if defined(HAVE_SINH) && defined(HAVE_COSH) 287 const double c =
cosh(x);
290 const double e = exp(x+x);
291 if (!
isinf(e))
return (e - 1) / (e + 1);
293 return x > 0 ? 1.0 : -1.0;
412 #if defined __CYGWIN__ 413 # include <cygwin/version.h> 414 # if CYGWIN_VERSION_DLL_MAJOR < 1005 415 # define nan(x) nan() 417 # define log(x) ((x) < 0.0 ? nan("") : log(x)) 418 # define log10(x) ((x) < 0.0 ? nan("") : log10(x)) 422 # define M_LN2 0.693147180559945309417232121458176568 425 # define M_LN10 2.30258509299404568401799145468436421 493 return log(d) + numbits *
M_LN2;
501 return log10(x)/log10(2.0);
504 extern double log2(
double);
566 return DBL2NUM(log10(d) + numbits * log10(2));
601 #define f_boolcast(x) ((x) ? Qtrue : Qfalse) 628 im = sqrt((d - re) / 2.0);
629 re = sqrt((d + re) / 2.0);
636 if (d == 0.0)
return DBL2NUM(0.0);
774 #if defined __MINGW32__ 776 ruby_tgamma(
const double d)
778 const double g =
tgamma(d);
787 #define tgamma(d) ruby_tgamma(d) 790 #if defined LGAMMA_R_PM0_FIX 792 ruby_lgamma_r(
const double d,
int *sign)
799 }
else if (d == 0.0 && !
signbit(d)) {
806 #define lgamma_r(d, sign) ruby_lgamma_r(d, sign) 852 static const double fact_table[] = {
872 121645100408832000.0,
873 2432902008176640000.0,
874 51090942171709440000.0,
875 1124000727777607680000.0,
880 enum {NFACT_TABLE =
numberof(fact_table)};
887 if (1.0 <= d && d <= (
double)NFACT_TABLE) {
888 return DBL2NUM(fact_table[(
int)d - 1]);
927 rb_math_##n(VALUE x)\ 929 return math_##n(0, x);\ 934 rb_math_##n(VALUE x, VALUE y)\ 936 return math_##n(0, x, y);\
RUBY_EXTERN double cbrt(double)
static VALUE math_gamma(VALUE unused_obj, VALUE x)
static VALUE math_ldexp(VALUE unused_obj, VALUE x, VALUE n)
RUBY_EXTERN int signbit(double x)
static VALUE math_sqrt(VALUE unused_obj, VALUE x)
static VALUE math_cos(VALUE unused_obj, VALUE x)
static VALUE math_lgamma(VALUE unused_obj, VALUE x)
static VALUE math_sin(VALUE unused_obj, VALUE x)
VALUE rb_eMathDomainError
static VALUE math_log(int argc, const VALUE *argv, VALUE unused_obj)
static VALUE f_signbit(VALUE x)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
static VALUE math_log10(VALUE unused_obj, VALUE x)
static VALUE math_cosh(VALUE unused_obj, VALUE x)
static VALUE math_atan2(VALUE unused_obj, VALUE y, VALUE x)
static VALUE math_exp(VALUE unused_obj, VALUE x)
RUBY_EXTERN double tgamma(double)
static double get_double_rshift(VALUE x, size_t *pnumbits)
static VALUE math_erfc(VALUE unused_obj, VALUE x)
#define RB_BIGNUM_TYPE_P(x)
RUBY_EXTERN double lgamma_r(double, int *)
static VALUE math_sinh(VALUE unused_obj, VALUE x)
#define RB_TYPE_P(obj, type)
static VALUE math_atan(VALUE unused_obj, VALUE x)
void rb_define_const(VALUE, const char *, VALUE)
static VALUE math_cbrt(VALUE unused_obj, VALUE x)
RUBY_SYMBOL_EXPORT_BEGIN RUBY_EXTERN double acosh(double)
static VALUE math_tanh(VALUE unused_obj, VALUE x)
RUBY_EXTERN double erfc(double)
RUBY_EXTERN int isinf(double)
static VALUE math_erf(VALUE unused_obj, VALUE x)
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
RUBY_EXTERN double atanh(double)
static VALUE math_atanh(VALUE unused_obj, VALUE x)
RUBY_EXTERN double hypot(double, double)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
static VALUE math_asin(VALUE unused_obj, VALUE x)
static VALUE math_tan(VALUE unused_obj, VALUE x)
#define domain_error(msg)
RUBY_EXTERN double asinh(double)
static VALUE math_asinh(VALUE unused_obj, VALUE x)
static double math_log1(VALUE x)
VALUE rb_complex_new(VALUE x, VALUE y)
VALUE rb_math_sqrt(VALUE x)
static VALUE f_negative_p(VALUE x)
static VALUE math_log2(VALUE unused_obj, VALUE x)
static VALUE math_acosh(VALUE unused_obj, VALUE x)
#define BIGNUM_POSITIVE_P(b)
size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret)
static VALUE math_frexp(VALUE unused_obj, VALUE x)
VALUE rb_complex_abs(VALUE cmp)
VALUE rb_big_rshift(VALUE x, VALUE y)
VALUE rb_define_module(const char *name)
VALUE rb_math_log(int argc, const VALUE *argv)
RUBY_EXTERN double erf(double)
static VALUE math_acos(VALUE unused_obj, VALUE x)
static VALUE math_hypot(VALUE unused_obj, VALUE x, VALUE y)