bigdecimal-math_r 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +13 -0
- data/changelog.md +24 -0
- data/ext/bigdecimal/math_r/algofunc.h +203 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/check_precise.h +12 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/infinity.h +6 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/minus_infinity.h +5 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/minus_one.h +6 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/minus_zero.h +6 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/nan.h +6 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/one.h +6 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/sign.h +10 -0
- data/ext/bigdecimal/math_r/api/bigdecimal/zero.h +6 -0
- data/ext/bigdecimal/math_r/api/bigmath/api_call1.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/api_call2.h +6 -0
- data/ext/bigdecimal/math_r/api/bigmath/atan.h +7 -0
- data/ext/bigdecimal/math_r/api/bigmath/atan_adopt.h +42 -0
- data/ext/bigdecimal/math_r/api/bigmath/cabs.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/carg.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/cexp.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/clog.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const.h +39 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_e.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_log10.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_log2.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_log_pi.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_pi.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_sqrt2.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/const_sqrt3.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/cpow.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/csqrt.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/degree_sparg.h +199 -0
- data/ext/bigdecimal/math_r/api/bigmath/escalb.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/exp.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/expxt.h +18 -0
- data/ext/bigdecimal/math_r/api/bigmath/hypot.h +10 -0
- data/ext/bigdecimal/math_r/api/bigmath/ipow.h +14 -0
- data/ext/bigdecimal/math_r/api/bigmath/l2norm.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/log.h +7 -0
- data/ext/bigdecimal/math_r/api/bigmath/pow.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/quadrant.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/sincos.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/sqrt.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/to_rad.h +41 -0
- data/ext/bigdecimal/math_r/api/kernel/rb_BigDecimal.h +6 -0
- data/ext/bigdecimal/math_r/api/kernel/rb_BigDecimal1.h +6 -0
- data/ext/bigdecimal/math_r/api/kernel/rb_BigDecimal_flo.h +9 -0
- data/ext/bigdecimal/math_r/api/kernel/rb_ImaginaryZ.h +8 -0
- data/ext/bigdecimal/math_r/api/numanalysis/condition_p.h +26 -0
- data/ext/bigdecimal/math_r/api/numanalysis/make_n.h +9 -0
- data/ext/bigdecimal/math_r/api/numeric/abs.h +7 -0
- data/ext/bigdecimal/math_r/api/numeric/canonicalize.h +140 -0
- data/ext/bigdecimal/math_r/api/numeric/cmpeql.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/equal_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/finite_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/imag.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/infinite_p.h +7 -0
- data/ext/bigdecimal/math_r/api/numeric/nan_p.h +5 -0
- data/ext/bigdecimal/math_r/api/numeric/negative_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/nonzero_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/notequal_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/numeric_p.h +5 -0
- data/ext/bigdecimal/math_r/api/numeric/positive_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/real.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/real_p.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/round.h +56 -0
- data/ext/bigdecimal/math_r/api/numeric/uminus.h +6 -0
- data/ext/bigdecimal/math_r/api/numeric/zero_p.h +6 -0
- data/ext/bigdecimal/math_r/api.c +13 -0
- data/ext/bigdecimal/math_r/api.h +69 -0
- data/ext/bigdecimal/math_r/const.c +186 -0
- data/ext/bigdecimal/math_r/decl.h +203 -0
- data/ext/bigdecimal/math_r/edf.c +180 -0
- data/ext/bigdecimal/math_r/erf.c +80 -0
- data/ext/bigdecimal/math_r/euler_f.c +572 -0
- data/ext/bigdecimal/math_r/exp.c +72 -0
- data/ext/bigdecimal/math_r/extconf.rb +185 -0
- data/ext/bigdecimal/math_r/gamma_r.c +251 -0
- data/ext/bigdecimal/math_r/hyperb.c +172 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/E/ser.h +22 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG10/ser.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG2/BBP2002.h +36 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG_PI/builtin.h +7 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/PI/machin.h +48 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT2/builtin.h +5 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT3/builtin.h +5 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acos/branch.h +25 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acos/edom.h +15 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acos/logrep.h +19 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acos/ser.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acosh/branch.h +19 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acosh/edom.h +17 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acosh/logrep.h +14 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acot/branch.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acot/logrep.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/branch.h +20 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/edom.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/logrep.h +33 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/branch.h +21 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/edom.h +20 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/logrep.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsch/branch.h +25 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsch/logrep.h +25 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/branch.h +22 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/edom.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/logrep.h +21 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/branch.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/edom.h +19 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/logrep.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/branch.h +22 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/edom.h +20 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/logrep.h +15 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/ser.h +32 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/branch.h +26 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/logrep.h +24 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/ser.h +48 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/branch.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/logrep.h +14 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/ser_euler.h +84 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/ser_usual.h +41 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/branch.h +24 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/edom.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/logrep.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/ser.h +33 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cabs/formula.h +8 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacos/branch.h +38 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacos/logrep.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacosh/branch.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacosh/logrep.h +17 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacot/branch.h +39 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacot/logrep.h +17 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacoth/branch.h +29 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacoth/logrep.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsc/branch.h +28 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsc/logrep.h +19 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsch/branch.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsch/logrep.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/carg/formula.h +8 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casec/branch.h +29 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casec/logrep.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casech/branch.h +38 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casech/logrep.h +9 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casin/branch.h +35 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casin/logrep.h +14 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casinh/branch.h +59 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casinh/logrep.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catan/branch.h +46 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catan/logrep.h +17 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catanh/branch.h +26 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catanh/logrep.h +10 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/formula.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccos/branch.h +41 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccos/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccosh/branch.h +37 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccosh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccot/branch.h +46 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccot/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccoth/branch.h +43 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccoth/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsc/branch.h +42 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsc/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsch/branch.h +38 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsch/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp/branch.h +42 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp/eulerf.h +21 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/branch.h +42 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/eulerf.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog/branch.h +54 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog/formula.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog10/formula.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog1p/branch.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog2/formula.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/branch.h +21 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/ser.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/branch.h +22 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/formula.h +30 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/branch.h +28 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/ser.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/branch.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/formula.h +30 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/ser.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cpow/formula.h +20 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/branch.h +28 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/branch.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/formula.h +31 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csec/branch.h +42 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csec/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csech/branch.h +38 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csech/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csin/branch.h +44 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csin/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csinh/branch.h +41 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csinh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/formula.h +66 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctan/branch.h +46 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctan/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/branch.h +43 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/newton.h +42 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/algo911.h +41 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/branch.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/cf.h +51 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_inf.h +53 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_zero.h +45 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/algo911.h +27 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/branch.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/cf.h +49 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/escalb/edf.h +87 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/branch.h +29 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/builtin.h +6 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/edf.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp2/branch.h +29 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp2/edf.h +19 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/expxt/edf.h +31 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/f_euler/formula.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/branch.h +25 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/l2norm.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/mmm.h +38 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ipow/edf.h +33 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/l2norm/formula.h +48 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/branch.h +40 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/builtin.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edf.h +10 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edom.h +10 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/mercator.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/ser_okumura.h +57 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/branch.h +40 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/edf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/mercator.h +35 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/branch.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/p_adic.h +37 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/ser_mercator.h +35 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/branch.h +40 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/edf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/mercator.h +35 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/logxt/edf.h +33 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/pow/formula.h +30 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/quadrant/formula.h +352 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm10/edf.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm2/edf.h +34 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/branch.h +27 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/branch.h +21 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/formula.h +25 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/branch.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/ser.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sincos/ser.h +50 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/branch.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/formula.h +26 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/ser.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinhcosh/ser.h +70 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/branch.h +16 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/builtin.h +12 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/edom.h +9 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/newton.h +36 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/branch.h +26 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/ser.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/branch.h +23 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/eulerf.h +11 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/formula.h +27 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/ser.h +14 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/trig/f_euler.h +290 -0
- data/ext/bigdecimal/math_r/log.c +256 -0
- data/ext/bigdecimal/math_r/logrep.c +537 -0
- data/ext/bigdecimal/math_r/math_r/bigdecimal.h +30 -0
- data/ext/bigdecimal/math_r/math_r/bigmath.h +61 -0
- data/ext/bigdecimal/math_r/math_r/bigmath_r.h +9 -0
- data/ext/bigdecimal/math_r/math_r/ext_extern.h +18 -0
- data/ext/bigdecimal/math_r/math_r/globals.h +71 -0
- data/ext/bigdecimal/math_r/math_r/numdiff.h +18 -0
- data/ext/bigdecimal/math_r/math_r/numeric.h +63 -0
- data/ext/bigdecimal/math_r/math_r.c +130 -0
- data/ext/bigdecimal/math_r/nucomp.c +158 -0
- data/ext/bigdecimal/math_r/overrides.c +91 -0
- data/ext/bigdecimal/math_r/power.c +207 -0
- data/ext/bigdecimal/math_r/solver.c +1516 -0
- data/ext/bigdecimal/math_r/trig.c +205 -0
- data/lib/bigdecimal/math_r/const/EulerGamma_engel.rb +46 -0
- data/lib/bigdecimal/math_r/const/LOG2_bbp2007.rb +39 -0
- data/lib/bigdecimal/math_r/const/PI_chudnovsky.rb +59 -0
- data/lib/bigdecimal/math_r/const/PI_euler.rb +40 -0
- data/lib/bigdecimal/math_r/const/PI_ramanujan1.rb +45 -0
- data/lib/bigdecimal/math_r/const/PI_ramanujan2.rb +46 -0
- data/lib/bigdecimal/math_r/const/b053977/b053977.txt +306 -0
- data/lib/bigdecimal/math_r/version.rb +7 -0
- data/lib/bigdecimal/math_r.rb +12 -0
- data/lib/bigdecimal/math_r.so +0 -0
- data/sig/bigdecimal/math_r.rbs +6 -0
- metadata +393 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
VALUE
|
2
|
+
log1p_branch(VALUE x, VALUE prec, bigmath_func1 cb)
|
3
|
+
{
|
4
|
+
VALUE y = Qundef;
|
5
|
+
VALUE one_thousand = rb_Rational(INT2FIX(1), INT2FIX(1000));
|
6
|
+
const ID geq = rb_intern_const(">=");
|
7
|
+
const ID gt = rb_intern_const(">");
|
8
|
+
|
9
|
+
x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
|
10
|
+
|
11
|
+
if (!rb_num_finite_p(x))
|
12
|
+
{
|
13
|
+
if (rb_num_nan_p(x))
|
14
|
+
y = BIG_NAN;
|
15
|
+
else
|
16
|
+
y = log_branch(x, prec, cb);
|
17
|
+
}
|
18
|
+
if (y == Qundef)
|
19
|
+
{
|
20
|
+
if (rb_num_zero_p(x))
|
21
|
+
y = BIG_ZERO;
|
22
|
+
else if (RTEST(rb_num_coerce_cmp(one_thousand, rb_num_abs(x), geq)))
|
23
|
+
y = cb(x, prec);
|
24
|
+
else if (RTEST(rb_num_coerce_cmp(INT2FIX(-1), x, gt)))
|
25
|
+
y = BIG_NAN;
|
26
|
+
else
|
27
|
+
{
|
28
|
+
x = rb_funcall1(x, '+', BIG_ONE);
|
29
|
+
y = rb_bigmath_log(x, prec);
|
30
|
+
y = rb_num_round(y, prec);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return y;
|
34
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
VALUE
|
2
|
+
log1p_p_adic(VALUE x, VALUE prec)
|
3
|
+
{
|
4
|
+
const ID div = rb_intern("div");
|
5
|
+
VALUE n, m, zero, one, t, i, d, y, c;
|
6
|
+
|
7
|
+
rb_check_precise(prec);
|
8
|
+
n = rb_numdiff_make_n(prec);
|
9
|
+
|
10
|
+
zero = BIG_ZERO;
|
11
|
+
one = BIG_ONE;
|
12
|
+
|
13
|
+
t = x;
|
14
|
+
i = one;
|
15
|
+
d = one;
|
16
|
+
y = zero;
|
17
|
+
c = one;
|
18
|
+
|
19
|
+
while (rb_numdiff_condition_p(y, d, n, &m))
|
20
|
+
{
|
21
|
+
d = rb_funcall( rb_funcall1(c, '*', t), div, 2, i, m);
|
22
|
+
y = rb_funcall1(y, '+', d);
|
23
|
+
c = rb_num_uminus(c);
|
24
|
+
i = rb_funcall1(i, '+', one);
|
25
|
+
t = rb_funcall1(t, '*', x);
|
26
|
+
}
|
27
|
+
|
28
|
+
RB_GC_GUARD(zero);
|
29
|
+
RB_GC_GUARD(one);
|
30
|
+
RB_GC_GUARD(t);
|
31
|
+
RB_GC_GUARD(i);
|
32
|
+
RB_GC_GUARD(d);
|
33
|
+
RB_GC_GUARD(y);
|
34
|
+
RB_GC_GUARD(c);
|
35
|
+
|
36
|
+
return rb_num_round(y, prec);
|
37
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
VALUE
|
2
|
+
log1p_ser_mercator(VALUE x, VALUE prec)
|
3
|
+
{
|
4
|
+
const ID div = rb_intern("div");
|
5
|
+
const ID mult = rb_intern("mult");
|
6
|
+
VALUE n = rb_numdiff_make_n(prec);
|
7
|
+
VALUE one = BIG_ONE;
|
8
|
+
VALUE w = rb_num_canonicalize(x, n, ARG_REAL, ARG_RAWVALUE);
|
9
|
+
VALUE t = one;
|
10
|
+
VALUE d = BIG_ONE;
|
11
|
+
VALUE y = BIG_ZERO;
|
12
|
+
int sign = 1;
|
13
|
+
VALUE m = Qundef;
|
14
|
+
|
15
|
+
while (rb_numdiff_condition_p(y, d, n, &m))
|
16
|
+
{
|
17
|
+
d = rb_funcall(w, div, 2, t, m);
|
18
|
+
t = rb_funcall1(t, '+', one);
|
19
|
+
w = rb_funcall(w, mult, 2, x, n);
|
20
|
+
if (sign == 1)
|
21
|
+
y = rb_funcall1(y, '+', d);
|
22
|
+
else
|
23
|
+
y = rb_funcall1(y, '-', d);
|
24
|
+
sign *= -1;
|
25
|
+
}
|
26
|
+
|
27
|
+
RB_GC_GUARD(one);
|
28
|
+
RB_GC_GUARD(w);
|
29
|
+
RB_GC_GUARD(t);
|
30
|
+
RB_GC_GUARD(d);
|
31
|
+
RB_GC_GUARD(x);
|
32
|
+
RB_GC_GUARD(y);
|
33
|
+
|
34
|
+
return rb_num_round(y, prec);
|
35
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
VALUE
|
2
|
+
log2_branch(VALUE x, VALUE prec, bigmath_func1 log2_cb)
|
3
|
+
{
|
4
|
+
VALUE y = Qundef;
|
5
|
+
|
6
|
+
x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
|
7
|
+
|
8
|
+
if (!rb_num_finite_p(x))
|
9
|
+
{
|
10
|
+
switch (rb_num_infinite_p(x)) {
|
11
|
+
case 1:
|
12
|
+
y = BIG_INF;
|
13
|
+
break;
|
14
|
+
case -1: case 0:
|
15
|
+
default:
|
16
|
+
y = BIG_NAN;
|
17
|
+
break;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
else if (rb_num_zero_p(x))
|
21
|
+
{
|
22
|
+
y = BIG_MINUS_INF;
|
23
|
+
}
|
24
|
+
else
|
25
|
+
{
|
26
|
+
if (rb_num_positive_p(x))
|
27
|
+
{
|
28
|
+
const ID add = rb_intern("add");
|
29
|
+
VALUE exp, fra;
|
30
|
+
fra = rcm2_edf(x, &exp);
|
31
|
+
exp = rb_BigDecimal1(exp);
|
32
|
+
fra = log2_cb(fra, prec);
|
33
|
+
y = rb_funcall(exp, add, 2, fra, prec);
|
34
|
+
}
|
35
|
+
else
|
36
|
+
y = BIG_NAN;
|
37
|
+
}
|
38
|
+
return y;
|
39
|
+
}
|
40
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
#if 0
|
3
|
+
static VALUE
|
4
|
+
log_ser_mercator_x(VALUE x, VALUE prec)
|
5
|
+
{
|
6
|
+
const ID div = rb_intern("div");
|
7
|
+
VALUE y;
|
8
|
+
x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
|
9
|
+
y = rb_funcall1(x, '-', INT2FIX(1));
|
10
|
+
y = rb_funcall(y, div, 2, x, prec);
|
11
|
+
y = rb_num_uminus(y);
|
12
|
+
return y;
|
13
|
+
}
|
14
|
+
#endif
|
15
|
+
|
16
|
+
VALUE
|
17
|
+
log2_mercator(VALUE x, VALUE prec)
|
18
|
+
{
|
19
|
+
const ID div = rb_intern("div");
|
20
|
+
VALUE fra = Qundef, exp = Qundef, y = Qundef;
|
21
|
+
|
22
|
+
rb_check_precise(prec);
|
23
|
+
|
24
|
+
fra = rcm2_edf(x, &exp);
|
25
|
+
|
26
|
+
y = rb_funcall1(fra, '-', INT2FIX(1));
|
27
|
+
fra = rb_funcall(y, div, 2, fra, prec);
|
28
|
+
fra = rb_num_uminus(fra);
|
29
|
+
fra = log1p_ser_mercator(fra, prec);
|
30
|
+
fra = rb_num_uminus(fra);
|
31
|
+
fra = rb_funcall(fra, div, 2, rb_bigmath_const_log2(prec), prec);
|
32
|
+
|
33
|
+
y = rb_funcall1(exp, '+', fra);
|
34
|
+
return rb_num_round(y, prec);
|
35
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
VALUE
|
2
|
+
logxt_edf(VALUE x, VALUE t, VALUE prec)
|
3
|
+
{
|
4
|
+
const ID mult = rb_intern("mult");
|
5
|
+
VALUE a, b, s, one_half, n, m;
|
6
|
+
|
7
|
+
n = rb_numdiff_make_n(prec);
|
8
|
+
a = rb_num_canonicalize(x, n, ARG_REAL, ARG_RAWVALUE);
|
9
|
+
b = BIG_ONE;
|
10
|
+
s = BIG_ZERO;
|
11
|
+
one_half = rb_BigDecimal1(rb_str_new_cstr("0.5"));
|
12
|
+
|
13
|
+
if (rb_num_zero_p(x))
|
14
|
+
return BIG_ZERO;
|
15
|
+
else if (rb_num_equal_p(x, INT2FIX(1)))
|
16
|
+
return BIG_ZERO;
|
17
|
+
while (rb_numdiff_condition_p(s, b, n, &m))
|
18
|
+
{
|
19
|
+
a = rb_funcall(a, mult, 2, a, m);
|
20
|
+
b = rb_funcall(one_half, mult, 2, b, m);
|
21
|
+
if (RTEST(rb_num_coerce_cmp(a, t, rb_intern(">="))))
|
22
|
+
{
|
23
|
+
s = rb_funcall1(s, '+', b);
|
24
|
+
a = rb_funcall1(a, '/', t);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
RB_GC_GUARD(b);
|
29
|
+
RB_GC_GUARD(s);
|
30
|
+
RB_GC_GUARD(one_half);
|
31
|
+
|
32
|
+
return s;
|
33
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
VALUE
|
2
|
+
pow_formula(VALUE x, VALUE y, VALUE prec)
|
3
|
+
{
|
4
|
+
VALUE a = Qundef;
|
5
|
+
|
6
|
+
rb_check_precise(prec);
|
7
|
+
if (!rb_num_real_p(x))
|
8
|
+
rb_raise(rb_eTypeError, "not a Real");
|
9
|
+
if (rb_num_zero_p(rb_num_real(x)))
|
10
|
+
a = BIG_ONE;
|
11
|
+
if (TYPE(y) == T_FIXNUM || TYPE(y) == T_BIGNUM)
|
12
|
+
{
|
13
|
+
if (rb_num_positive_p(rb_num_real(x)))
|
14
|
+
a = ipow_edf(x, y, prec);
|
15
|
+
else // if (rb_num_negative_p(rb_num_real(x)))
|
16
|
+
a = rb_num_uminus(ipow_edf(rb_num_abs(x), y, prec));
|
17
|
+
}
|
18
|
+
else if (rb_num_real_p(y))
|
19
|
+
{
|
20
|
+
a = rb_bigmath_log(rb_num_abs(x), prec);
|
21
|
+
a = rb_funcall1(y, '*', a);
|
22
|
+
a = rb_bigmath_exp(a, prec);
|
23
|
+
if (rb_num_negative_p(x))
|
24
|
+
a = rb_num_uminus(a);
|
25
|
+
}
|
26
|
+
else
|
27
|
+
rb_raise(rb_eTypeError, "not a Real");
|
28
|
+
|
29
|
+
return a;
|
30
|
+
}
|
@@ -0,0 +1,352 @@
|
|
1
|
+
|
2
|
+
static inline VALUE
|
3
|
+
quadrant_nonfinite(VALUE x, VALUE y, VALUE prec)
|
4
|
+
{
|
5
|
+
const ID div = rb_intern("div");
|
6
|
+
const ID mult = rb_intern("mult");
|
7
|
+
VALUE w = Qundef, pi = Qundef;
|
8
|
+
int x_sgn, y_sgn;
|
9
|
+
// Ignore non-regular case
|
10
|
+
if (rb_num_nonzero_p(rb_num_imag(x)) ||
|
11
|
+
rb_num_nonzero_p(rb_num_imag(y)))
|
12
|
+
{
|
13
|
+
goto elsewise;
|
14
|
+
}
|
15
|
+
// The poles of +y+ axis
|
16
|
+
else if ((y_sgn = rb_num_infinite_p(y)) != 0 &&
|
17
|
+
rb_num_finite_p(x))
|
18
|
+
{
|
19
|
+
VALUE real_x = rb_num_real(x);
|
20
|
+
switch (y_sgn) {
|
21
|
+
case 1: // 0-Deg
|
22
|
+
switch (NUM2INT(rb_num_cmpeql(real_x, INT2FIX(0)))) {
|
23
|
+
case -1:
|
24
|
+
w = BIG_MINUS_ZERO;
|
25
|
+
break;
|
26
|
+
case 0:
|
27
|
+
if (TYPE(real_x) == T_FLOAT)
|
28
|
+
w = rb_BigDecimal_flo(real_x);
|
29
|
+
else if (CLASS_OF(real_x) == rb_cBigDecimal)
|
30
|
+
w = real_x;
|
31
|
+
else
|
32
|
+
w = BIG_ZERO;
|
33
|
+
break;
|
34
|
+
case 1:
|
35
|
+
w = BIG_ZERO;
|
36
|
+
break;
|
37
|
+
}
|
38
|
+
break;
|
39
|
+
case -1: // 180-Deg
|
40
|
+
pi = rb_bigmath_const_pi(prec);
|
41
|
+
switch (NUM2INT(rb_num_cmpeql(real_x, INT2FIX(0)))) {
|
42
|
+
case -1:
|
43
|
+
w = rb_num_uminus(pi);
|
44
|
+
break;
|
45
|
+
case 0:
|
46
|
+
if (TYPE(real_x) == T_FLOAT)
|
47
|
+
{
|
48
|
+
w = rb_BigDecimal_flo(real_x);
|
49
|
+
w = NUM2INT(rb_BigDecimal_sign(w)) == -1 ?
|
50
|
+
rb_num_uminus(pi) : pi;
|
51
|
+
}
|
52
|
+
else if (CLASS_OF(real_x) == rb_cBigDecimal)
|
53
|
+
w = NUM2INT(rb_BigDecimal_sign(real_x)) == -1 ?
|
54
|
+
rb_num_uminus(pi) : pi;
|
55
|
+
else
|
56
|
+
w = pi;
|
57
|
+
break;
|
58
|
+
case 1:
|
59
|
+
w = pi;
|
60
|
+
break;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
// The poles of +x+ axis
|
65
|
+
else if ((x_sgn = rb_num_infinite_p(x)) != 0 &&
|
66
|
+
rb_num_finite_p(y))
|
67
|
+
{
|
68
|
+
pi = rb_bigmath_const_pi(prec);
|
69
|
+
switch (x_sgn) {
|
70
|
+
case 1: // 90-Deg
|
71
|
+
w = rb_funcall(pi, div, 2, INT2FIX(2), prec);
|
72
|
+
break;
|
73
|
+
case -1: // 270-Deg
|
74
|
+
w = rb_funcall(pi, div, 2, INT2FIX(-2), prec);
|
75
|
+
break;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
// Diagonals +x+ and +y+
|
79
|
+
else if (x_sgn != 0 && y_sgn != 0)
|
80
|
+
{
|
81
|
+
pi = rb_bigmath_const_pi(prec);
|
82
|
+
if (x_sgn == 1 && y_sgn == 1) // 45-Deg
|
83
|
+
w = rb_funcall(pi, div, 2, INT2FIX(4), prec);
|
84
|
+
else if (x_sgn == 1 && y_sgn == -1) // 135-Deg
|
85
|
+
w = rb_funcall(pi, div, 2, INT2FIX(-4), prec);
|
86
|
+
else if (x_sgn == -1 && y_sgn == -1) // 225-Deg
|
87
|
+
w = rb_funcall(pi, mult, 2,
|
88
|
+
rb_Rational(INT2FIX(-3), INT2FIX(4)), prec);
|
89
|
+
else if (x_sgn == -1 && y_sgn == 1) // 315-Deg
|
90
|
+
w = rb_funcall(pi, mult, 2,
|
91
|
+
rb_Rational(INT2FIX(3), INT2FIX(4)), prec);
|
92
|
+
}
|
93
|
+
else
|
94
|
+
{
|
95
|
+
elsewise:
|
96
|
+
if (!rb_num_real_p(x) || !rb_num_real_p(y))
|
97
|
+
w = rb_Complex(BIG_NAN, BIG_NAN);
|
98
|
+
else
|
99
|
+
w = BIG_NAN;
|
100
|
+
}
|
101
|
+
return w;
|
102
|
+
}
|
103
|
+
|
104
|
+
static inline VALUE
|
105
|
+
quadrant_argument(VALUE x, VALUE y, VALUE prec)
|
106
|
+
{
|
107
|
+
const ID mult = rb_intern("mult");
|
108
|
+
const ID div = rb_intern("div");
|
109
|
+
VALUE w = Qundef, pi = Qundef;
|
110
|
+
bool nucomp = (!rb_num_real_p(x) || !rb_num_real_p(y)) ? true : false;
|
111
|
+
if (rb_num_zero_p(y))
|
112
|
+
{
|
113
|
+
|
114
|
+
x = rb_funcall(BIG_ZERO, mult, 2, rb_num_real(x), prec);
|
115
|
+
y = rb_funcall(BIG_ZERO, mult, 2, rb_num_real(y), prec);
|
116
|
+
switch (NUM2INT(rb_BigDecimal_sign(x))) {
|
117
|
+
case 1: // 0-Deg
|
118
|
+
switch (NUM2INT(rb_BigDecimal_sign(y))) {
|
119
|
+
case 1:
|
120
|
+
w = BIG_ZERO;
|
121
|
+
break;
|
122
|
+
case -1:
|
123
|
+
w = BIG_MINUS_ZERO;
|
124
|
+
break;
|
125
|
+
}
|
126
|
+
break;
|
127
|
+
case -1: // 180-Deg
|
128
|
+
pi = rb_bigmath_const_pi(prec);
|
129
|
+
switch (NUM2INT(rb_BigDecimal_sign(y))) {
|
130
|
+
case 1:
|
131
|
+
w = pi;
|
132
|
+
break;
|
133
|
+
case -1:
|
134
|
+
w = rb_num_uminus(pi);
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
break;
|
138
|
+
}
|
139
|
+
}
|
140
|
+
else // 90-Deg
|
141
|
+
{
|
142
|
+
pi = rb_bigmath_const_pi(prec);
|
143
|
+
y = rb_funcall(BIG_ZERO, mult, 2, rb_num_real(y), prec);
|
144
|
+
switch (NUM2INT(rb_BigDecimal_sign(y))) {
|
145
|
+
case 1:
|
146
|
+
w = rb_funcall(pi, div, 2, INT2FIX(2), prec);
|
147
|
+
break;
|
148
|
+
case -1:
|
149
|
+
w = rb_funcall(pi, div, 2, INT2FIX(-2), prec);
|
150
|
+
break;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
if (nucomp)
|
154
|
+
w = rb_Complex1(w);
|
155
|
+
return w;
|
156
|
+
}
|
157
|
+
|
158
|
+
static inline bool
|
159
|
+
quadrant_diagonal_check(VALUE x, VALUE y)
|
160
|
+
{
|
161
|
+
const ID abs = rb_intern("abs");
|
162
|
+
VALUE real_cmp = rb_num_cmpeql(
|
163
|
+
rb_funcall(rb_num_real(x), abs, 0),
|
164
|
+
rb_funcall(rb_num_real(y), abs, 0));
|
165
|
+
VALUE imag_cmp = rb_num_cmpeql(
|
166
|
+
rb_funcall(rb_num_imag(x), abs, 0),
|
167
|
+
rb_funcall(rb_num_imag(y), abs, 0));
|
168
|
+
return (FIX2INT(real_cmp) == 0 && FIX2INT(imag_cmp) == 0);
|
169
|
+
}
|
170
|
+
|
171
|
+
static inline VALUE
|
172
|
+
quadrant_diagonal(VALUE x, VALUE y, VALUE prec)
|
173
|
+
{
|
174
|
+
const ID div = rb_intern("div");
|
175
|
+
const ID mult = rb_intern("mult");
|
176
|
+
VALUE w = Qundef, pi = Qundef;
|
177
|
+
VALUE x_real = rb_num_real(x), x_imag = rb_num_imag(x),
|
178
|
+
y_real = rb_num_real(y), y_imag = rb_num_imag(y);
|
179
|
+
// quadrant(ix, iy), |x| == |y|
|
180
|
+
if (rb_num_zero_p(x_real) && rb_num_zero_p(y_real))
|
181
|
+
{
|
182
|
+
pi = rb_bigmath_const_pi(prec);
|
183
|
+
if (rb_num_positive_p(x_imag)) // 45-Deg
|
184
|
+
{
|
185
|
+
if (rb_num_positive_p(y_imag))
|
186
|
+
w = rb_funcall(pi, div, 2, INT2FIX(4), prec);
|
187
|
+
else // if (rb_num_negative_p(y_imag))
|
188
|
+
w = rb_funcall(pi, div, 2, INT2FIX(-4), prec);
|
189
|
+
}
|
190
|
+
else // if rb_num_negative_p(y_imag) // 135-Deg
|
191
|
+
{
|
192
|
+
if (rb_num_positive_p(y_imag))
|
193
|
+
w = rb_funcall(pi, mult, 2,
|
194
|
+
rb_Rational(INT2FIX(3), INT2FIX(4)), prec);
|
195
|
+
else // if (rb_num_negative_p(y_imag))
|
196
|
+
w = rb_funcall(pi, mult, 2,
|
197
|
+
rb_Rational(INT2FIX(-3), INT2FIX(4)), prec);
|
198
|
+
}
|
199
|
+
w = rb_Complex1(w);
|
200
|
+
}
|
201
|
+
// quadrant(x+iy, x+iy)
|
202
|
+
else if (NUM2INT(rb_num_cmpeql(x_real, y_real)) == 0 &&
|
203
|
+
NUM2INT(rb_num_cmpeql(x_imag, y_imag)) == 0)
|
204
|
+
{
|
205
|
+
pi = rb_bigmath_const_pi(prec);
|
206
|
+
if (rb_num_positive_p(x_real))
|
207
|
+
w = rb_funcall(pi, div, 2, INT2FIX(4), prec);
|
208
|
+
else
|
209
|
+
w = rb_funcall(pi, mult, 2,
|
210
|
+
rb_Rational(INT2FIX(-3), INT2FIX(4)), prec);
|
211
|
+
if (!rb_num_real_p(x) || ! rb_num_real_p(y))
|
212
|
+
w = rb_Complex1(w);
|
213
|
+
}
|
214
|
+
// quadrant(x-iy, -x+iy) or quadrant(-x+iy, x-iy)
|
215
|
+
else if (NUM2INT(rb_num_cmpeql(x_real, y_real)) != 0 &&
|
216
|
+
NUM2INT(rb_num_cmpeql(x_imag, y_imag)) != 0)
|
217
|
+
{
|
218
|
+
pi = rb_bigmath_const_pi(prec);
|
219
|
+
if (rb_num_positive_p(x_real))
|
220
|
+
w = rb_funcall(pi, div, 2, INT2FIX(-4), prec);
|
221
|
+
else
|
222
|
+
w = rb_funcall(pi, mult, 2,
|
223
|
+
rb_Rational(INT2FIX(3), INT2FIX(4)), prec);
|
224
|
+
w = rb_Complex1(w);
|
225
|
+
}
|
226
|
+
return w;
|
227
|
+
}
|
228
|
+
|
229
|
+
|
230
|
+
static inline VALUE
|
231
|
+
quadrant_csqrt_iter(RB_BLOCK_CALL_FUNC_ARGLIST(y, c))
|
232
|
+
{
|
233
|
+
return rb_funcall(y, '*', 1, y);
|
234
|
+
}
|
235
|
+
|
236
|
+
|
237
|
+
static inline VALUE
|
238
|
+
quadrant_finite(VALUE x, VALUE y, VALUE prec)
|
239
|
+
{
|
240
|
+
const ID sub = rb_intern("sub");
|
241
|
+
const ID div = rb_intern("div");
|
242
|
+
VALUE w = Qundef, ct = Qundef, t = Qundef, pi = Qundef;
|
243
|
+
VALUE x_real = rb_num_real(x), x_imag = rb_num_imag(x),
|
244
|
+
y_real = rb_num_real(y), y_imag = rb_num_imag(y);
|
245
|
+
int coordinate = 1;
|
246
|
+
// Real solution:
|
247
|
+
if (rb_num_zero_p(x_imag) && rb_num_zero_p(y_imag))
|
248
|
+
{
|
249
|
+
x_real = rb_num_canonicalize(x_real, prec, ARG_REAL, ARG_RAWVALUE);
|
250
|
+
y_real = rb_num_canonicalize(y_real, prec, ARG_REAL, ARG_RAWVALUE);
|
251
|
+
if (rb_num_positive_p(x_real) && rb_num_negative_p(y_real))
|
252
|
+
coordinate = 4;
|
253
|
+
else if (rb_num_negative_p(x_real) && rb_num_negative_p(y_real))
|
254
|
+
coordinate = 3;
|
255
|
+
else if (rb_num_negative_p(x_real) && rb_num_positive_p(y_real))
|
256
|
+
coordinate = 2;
|
257
|
+
// BUG-FIX: BigDecimal to Rational drops significant digits
|
258
|
+
#if 0
|
259
|
+
w = rb_Rational(y_real, x_real);
|
260
|
+
#else
|
261
|
+
w = rb_funcall(y_real, div, 2, x_real, prec);
|
262
|
+
#endif
|
263
|
+
if (rb_num_negative_p(w)) w = rb_num_uminus(w); // abs()
|
264
|
+
#if 0
|
265
|
+
t = rb_BigDecimal(w, prec);
|
266
|
+
#else
|
267
|
+
t = w;
|
268
|
+
#endif
|
269
|
+
}
|
270
|
+
// Complex solution: -i log( (x+iy) / sqrt(x^2+y^2) )
|
271
|
+
else
|
272
|
+
{
|
273
|
+
const ID sum = rb_intern("sum");
|
274
|
+
w = rb_block_call(rb_assoc_new(x, y), sum, 0, NULL,
|
275
|
+
quadrant_csqrt_iter, Qnil);
|
276
|
+
w = rb_bigmath_csqrt(w, prec);
|
277
|
+
ct = rb_funcall1(rb_Complex(x, y), '/', w);
|
278
|
+
if (rb_num_positive_p(rb_num_real(ct)) &&
|
279
|
+
rb_num_negative_p(rb_num_imag(ct)))
|
280
|
+
coordinate = 4;
|
281
|
+
else if (rb_num_negative_p(rb_num_real(ct)) &&
|
282
|
+
rb_num_negative_p(rb_num_imag(ct)))
|
283
|
+
coordinate = 3;
|
284
|
+
else if (rb_num_negative_p(rb_num_real(ct)) &&
|
285
|
+
rb_num_positive_p(rb_num_imag(ct)))
|
286
|
+
coordinate = 2;
|
287
|
+
t = rb_funcall(rb_num_imag(ct), div, 2, rb_num_real(ct), prec);
|
288
|
+
if (rb_num_negative_p(t))
|
289
|
+
t = rb_num_uminus(t);
|
290
|
+
}
|
291
|
+
|
292
|
+
// Calculate tan^{-1}(y/x)
|
293
|
+
w = rb_bigmath_atan(t, prec);
|
294
|
+
switch (coordinate) {
|
295
|
+
case 4:
|
296
|
+
w = rb_num_uminus(w);
|
297
|
+
break;
|
298
|
+
case 3:
|
299
|
+
pi = rb_bigmath_const_pi(prec);
|
300
|
+
w = rb_funcall(w, sub, 2, pi, prec);
|
301
|
+
break;
|
302
|
+
case 2:
|
303
|
+
pi = rb_bigmath_const_pi(prec);
|
304
|
+
w = rb_funcall(pi, sub, 2, w, prec);
|
305
|
+
break;
|
306
|
+
}
|
307
|
+
|
308
|
+
// For Complex solutions
|
309
|
+
if (rb_num_nonzero_p(x_imag) || rb_num_nonzero_p(y_imag))
|
310
|
+
{
|
311
|
+
VALUE abs = rb_bigmath_cabs(ct, prec);
|
312
|
+
w = rb_ImaginaryZ(rb_Complex(rb_bigmath_log(abs, prec), w),
|
313
|
+
SIGN_MINUS);
|
314
|
+
}
|
315
|
+
|
316
|
+
if (!rb_num_real_p(x) || ! rb_num_real_p(y))
|
317
|
+
w = rb_Complex1(w);
|
318
|
+
|
319
|
+
return w;
|
320
|
+
}
|
321
|
+
|
322
|
+
VALUE
|
323
|
+
quadrant_formula(VALUE x, VALUE y, VALUE prec)
|
324
|
+
{
|
325
|
+
VALUE w = Qundef;
|
326
|
+
rb_check_precise(prec);
|
327
|
+
if (!rb_num_finite_p(x) || !rb_num_finite_p(y))
|
328
|
+
{
|
329
|
+
w = quadrant_nonfinite(x, y, prec);
|
330
|
+
}
|
331
|
+
else // if (rb_num_finite_p(x) && rb_num_finite_p(y))
|
332
|
+
{
|
333
|
+
if (rb_num_zero_p(x) || rb_num_zero_p(y))
|
334
|
+
{
|
335
|
+
w = quadrant_argument(x, y, prec);
|
336
|
+
}
|
337
|
+
else
|
338
|
+
{
|
339
|
+
if (quadrant_diagonal_check(x, y))
|
340
|
+
{
|
341
|
+
w = quadrant_diagonal(x, y, prec);
|
342
|
+
}
|
343
|
+
if (w == Qundef)
|
344
|
+
{
|
345
|
+
w = quadrant_finite(x, y, prec);
|
346
|
+
}
|
347
|
+
}
|
348
|
+
}
|
349
|
+
if (w == Qundef)
|
350
|
+
rb_raise(rb_eRuntimeError, "no solution");
|
351
|
+
return rb_num_round(w, prec);
|
352
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
VALUE
|
2
|
+
rcm10_edf(VALUE x, VALUE *reso)
|
3
|
+
{
|
4
|
+
VALUE fra = x; *reso = INT2FIX(0);
|
5
|
+
if (rb_num_nonzero_p(fra) && rb_num_finite_p(fra))
|
6
|
+
{
|
7
|
+
long resov = 0;
|
8
|
+
bool has_sign = RTEST(rb_num_coerce_cmp(x, INT2FIX(0), '<'));
|
9
|
+
VALUE rat_ten = rb_rational_new1(INT2FIX(10));
|
10
|
+
fra = rb_Rational1(fra);
|
11
|
+
if (rb_num_negative_p(fra))
|
12
|
+
fra = rb_num_uminus(fra);
|
13
|
+
if (RTEST(rb_num_coerce_cmp(fra, INT2FIX(10), rb_intern(">="))))
|
14
|
+
{
|
15
|
+
while (RTEST(rb_num_coerce_cmp(fra, INT2FIX(10), rb_intern(">="))))
|
16
|
+
{
|
17
|
+
fra = rb_funcall1(fra, '/', rat_ten);
|
18
|
+
resov++;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
else if (RTEST(rb_num_coerce_cmp(fra, INT2FIX(1), '<')))
|
22
|
+
{
|
23
|
+
while (RTEST(rb_num_coerce_cmp(fra, INT2FIX(1), '<')))
|
24
|
+
{
|
25
|
+
fra = rb_funcall1(fra, '*', rat_ten);
|
26
|
+
resov--;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
if (has_sign)
|
30
|
+
fra = rb_num_uminus(fra);
|
31
|
+
*reso = LONG2FIX(resov);
|
32
|
+
}
|
33
|
+
return fra;
|
34
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
VALUE
|
2
|
+
rcm2_edf(VALUE x, VALUE *reso)
|
3
|
+
{
|
4
|
+
VALUE fra = x; *reso = INT2FIX(0);
|
5
|
+
if (rb_num_nonzero_p(fra) && rb_num_finite_p(fra))
|
6
|
+
{
|
7
|
+
long resov = 0;
|
8
|
+
bool has_sign = RTEST(rb_num_coerce_cmp(x, INT2FIX(0), '<'));
|
9
|
+
VALUE rat_two = rb_rational_new1(INT2FIX(2));
|
10
|
+
fra = rb_Rational1(fra);
|
11
|
+
if (rb_num_negative_p(fra))
|
12
|
+
fra = rb_num_uminus(fra);
|
13
|
+
if (RTEST(rb_num_coerce_cmp(fra, INT2FIX(1), rb_intern(">="))))
|
14
|
+
{
|
15
|
+
while (RTEST(rb_num_coerce_cmp(INT2FIX(2), fra, rb_intern("<="))))
|
16
|
+
{
|
17
|
+
fra = rb_funcall1(fra, '/', rat_two);
|
18
|
+
resov++;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
else
|
22
|
+
{
|
23
|
+
while (RTEST(rb_num_coerce_cmp(INT2FIX(1), fra, '>')))
|
24
|
+
{
|
25
|
+
fra = rb_funcall1(fra, '*', rat_two);
|
26
|
+
resov--;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
if (has_sign)
|
30
|
+
fra = rb_num_uminus(fra);
|
31
|
+
*reso = LONG2FIX(resov);
|
32
|
+
}
|
33
|
+
return fra;
|
34
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
VALUE
|
2
|
+
sec_branch(VALUE x, VALUE prec, bigmath_func1 sec_cb)
|
3
|
+
{
|
4
|
+
VALUE w = Qundef;
|
5
|
+
|
6
|
+
x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
|
7
|
+
|
8
|
+
if (rb_num_nan_p(x))
|
9
|
+
w = BIG_NAN;
|
10
|
+
else if (rb_num_infinite_p(x) != 0)
|
11
|
+
{
|
12
|
+
w = BIG_ONE;
|
13
|
+
}
|
14
|
+
else
|
15
|
+
{
|
16
|
+
VALUE t = Qundef;
|
17
|
+
VALUE v_cos = Qundef;
|
18
|
+
x = rb_bigmath_to_rad(x, prec, &t);
|
19
|
+
if (-1 != rb_bigmath_degree_sparg(t, prec, NULL, &v_cos))
|
20
|
+
{
|
21
|
+
w = rb_num_canonicalize(v_cos, prec, ARG_REAL, ARG_RECIPROCAL);
|
22
|
+
}
|
23
|
+
else
|
24
|
+
w = sec_cb(x, prec);
|
25
|
+
}
|
26
|
+
return w;
|
27
|
+
}
|