From 3ecc254a3ff46aa6dd70f0ee61acd11ff7ed0d1c Mon Sep 17 00:00:00 2001 From: gogotanaka Date: Mon, 3 Nov 2014 21:39:55 -0800 Subject: [PATCH] Combine Need_Float and RFLOAT_VALUE into one macro --- math.c | 87 +++++++++++++++++++++--------------------------------------------- 1 file changed, 28 insertions(+), 59 deletions(-) diff --git a/math.c b/math.c index 5d380a4..1874743 100644 --- a/math.c +++ b/math.c @@ -25,11 +25,7 @@ VALUE rb_mMath; VALUE rb_eMathDomainError; -#define Need_Float(x) do {if (!RB_TYPE_P(x, T_FLOAT)) {(x) = rb_to_float(x);}} while(0) -#define Need_Float2(x,y) do {\ - Need_Float(x);\ - Need_Float(y);\ -} while (0) +#define Get_RFloat_Value(x) RFLOAT_VALUE(RB_TYPE_P(x, T_FLOAT) ? x : rb_to_float(x)) #define domain_error(msg) \ rb_raise(rb_eMathDomainError, "Numerical argument is out of domain - " #msg) @@ -69,9 +65,8 @@ math_atan2(VALUE obj, VALUE y, VALUE x) # define M_PI 3.14159265358979323846 #endif double dx, dy; - Need_Float2(y, x); - dx = RFLOAT_VALUE(x); - dy = RFLOAT_VALUE(y); + dx = Get_RFloat_Value(x); + dy = Get_RFloat_Value(y); if (dx == 0.0 && dy == 0.0) { if (!signbit(dx)) return DBL2NUM(dy); @@ -114,8 +109,7 @@ math_atan2(VALUE obj, VALUE y, VALUE x) static VALUE math_cos(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(cos(RFLOAT_VALUE(x))); + return DBL2NUM(cos(Get_RFloat_Value(x))); } /* @@ -136,8 +130,7 @@ math_cos(VALUE obj, VALUE x) static VALUE math_sin(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(sin(RFLOAT_VALUE(x))); + return DBL2NUM(sin(Get_RFloat_Value(x))); } @@ -158,8 +151,7 @@ math_sin(VALUE obj, VALUE x) static VALUE math_tan(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(tan(RFLOAT_VALUE(x))); + return DBL2NUM(tan(Get_RFloat_Value(x))); } /* @@ -181,8 +173,7 @@ math_acos(VALUE obj, VALUE x) { double d0, d; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < -1.0 || 1.0 < d0) domain_error("acos"); d = acos(d0); @@ -207,8 +198,7 @@ math_asin(VALUE obj, VALUE x) { double d0, d; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < -1.0 || 1.0 < d0) domain_error("asin"); d = asin(d0); @@ -231,8 +221,7 @@ math_asin(VALUE obj, VALUE x) static VALUE math_atan(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(atan(RFLOAT_VALUE(x))); + return DBL2NUM(atan(Get_RFloat_Value(x))); } #ifndef HAVE_COSH @@ -260,8 +249,7 @@ cosh(double x) static VALUE math_cosh(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(cosh(RFLOAT_VALUE(x))); + return DBL2NUM(cosh(Get_RFloat_Value(x))); } #ifndef HAVE_SINH @@ -289,8 +277,7 @@ sinh(double x) static VALUE math_sinh(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(sinh(RFLOAT_VALUE(x))); + return DBL2NUM(sinh(Get_RFloat_Value(x))); } #ifndef HAVE_TANH @@ -318,8 +305,7 @@ tanh(double x) static VALUE math_tanh(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(tanh(RFLOAT_VALUE(x))); + return DBL2NUM(tanh(Get_RFloat_Value(x))); } /* @@ -341,8 +327,7 @@ math_acosh(VALUE obj, VALUE x) { double d0, d; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < 1.0) domain_error("acosh"); d = acosh(d0); @@ -366,8 +351,7 @@ math_acosh(VALUE obj, VALUE x) static VALUE math_asinh(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(asinh(RFLOAT_VALUE(x))); + return DBL2NUM(asinh(Get_RFloat_Value(x))); } /* @@ -389,8 +373,7 @@ math_atanh(VALUE obj, VALUE x) { double d0, d; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < -1.0 || +1.0 < d0) domain_error("atanh"); /* check for pole error */ @@ -419,8 +402,7 @@ math_atanh(VALUE obj, VALUE x) static VALUE math_exp(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(exp(RFLOAT_VALUE(x))); + return DBL2NUM(exp(Get_RFloat_Value(x))); } #if defined __CYGWIN__ @@ -484,8 +466,7 @@ math_log1(VALUE x) numbits = 0; } - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < 0.0) domain_error("log"); /* check for pole error */ @@ -540,8 +521,7 @@ math_log2(VALUE obj, VALUE x) numbits = 0; } - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < 0.0) domain_error("log2"); /* check for pole error */ @@ -582,8 +562,7 @@ math_log10(VALUE obj, VALUE x) numbits = 0; } - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < 0.0) domain_error("log10"); /* check for pole error */ @@ -625,8 +604,7 @@ math_sqrt(VALUE obj, VALUE x) { double d0, d; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (d0 < 0.0) domain_error("sqrt"); if (d0 == 0.0) return DBL2NUM(0.0); @@ -672,8 +650,7 @@ math_sqrt(VALUE obj, VALUE x) static VALUE math_cbrt(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(cbrt(RFLOAT_VALUE(x))); + return DBL2NUM(cbrt(Get_RFloat_Value(x))); } /* @@ -693,9 +670,7 @@ math_frexp(VALUE obj, VALUE x) double d; int exp; - Need_Float(x); - - d = frexp(RFLOAT_VALUE(x), &exp); + d = frexp(Get_RFloat_Value(x), &exp); return rb_assoc_new(DBL2NUM(d), INT2NUM(exp)); } @@ -712,8 +687,7 @@ math_frexp(VALUE obj, VALUE x) static VALUE math_ldexp(VALUE obj, VALUE x, VALUE n) { - Need_Float(x); - return DBL2NUM(ldexp(RFLOAT_VALUE(x), NUM2INT(n))); + return DBL2NUM(ldexp(Get_RFloat_Value(x), NUM2INT(n))); } /* @@ -729,8 +703,7 @@ math_ldexp(VALUE obj, VALUE x, VALUE n) static VALUE math_hypot(VALUE obj, VALUE x, VALUE y) { - Need_Float2(x, y); - return DBL2NUM(hypot(RFLOAT_VALUE(x), RFLOAT_VALUE(y))); + return DBL2NUM(hypot(Get_RFloat_Value(x), Get_RFloat_Value(y))); } /* @@ -750,8 +723,7 @@ math_hypot(VALUE obj, VALUE x, VALUE y) static VALUE math_erf(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(erf(RFLOAT_VALUE(x))); + return DBL2NUM(erf(Get_RFloat_Value(x))); } /* @@ -771,8 +743,7 @@ math_erf(VALUE obj, VALUE x) static VALUE math_erfc(VALUE obj, VALUE x) { - Need_Float(x); - return DBL2NUM(erfc(RFLOAT_VALUE(x))); + return DBL2NUM(erfc(Get_RFloat_Value(x))); } /* @@ -848,8 +819,7 @@ math_gamma(VALUE obj, VALUE x) }; double d0, d; double intpart, fracpart; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (isinf(d0) && signbit(d0)) domain_error("gamma"); fracpart = modf(d0, &intpart); @@ -884,8 +854,7 @@ math_lgamma(VALUE obj, VALUE x) double d0, d; int sign=1; VALUE v; - Need_Float(x); - d0 = RFLOAT_VALUE(x); + d0 = Get_RFloat_Value(x); /* check for domain error */ if (isinf(d0)) { if (signbit(d0)) domain_error("lgamma"); -- 1.8.5.2 (Apple Git-48)