bigdecimal-math_r 0.2.1 → 0.2.3
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 +4 -4
- data/changelog.md +16 -0
- data/ext/bigdecimal/math_r/algofunc.h +11 -1
- data/ext/bigdecimal/math_r/api/bigmath/const_e.h +1 -1
- data/ext/bigdecimal/math_r/api/bigmath/const_euler_gamma.h +5 -0
- data/ext/bigdecimal/math_r/api/bigmath/csqrt.h +1 -1
- data/ext/bigdecimal/math_r/api/kernel/rb_BigDecimal_flo.h +8 -2
- data/ext/bigdecimal/math_r/api/numeric/nan_p.h +4 -1
- data/ext/bigdecimal/math_r/api.h +2 -0
- data/ext/bigdecimal/math_r/const.c +42 -5
- data/ext/bigdecimal/math_r/decl.h +11 -1
- data/ext/bigdecimal/math_r/exp.c +45 -3
- data/ext/bigdecimal/math_r/extconf.rb +5 -1
- data/ext/bigdecimal/math_r/{gamma_r.c → gamma_beta.c} +11 -78
- data/ext/bigdecimal/math_r/internal/algo/bigmath/E/{ser.h → napier.h} +1 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/EulerGamma/borwein_bailey.h +37 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG10/ser.h +4 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG_PI/builtin.h +3 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT2/builtin.h +4 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT3/builtin.h +4 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acosh/edom.h +7 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acot/logrep.h +9 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/edom.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/logrep.h +5 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/edom.h +7 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/logrep.h +6 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/acsch/logrep.h +7 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/edom.h +7 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/logrep.h +8 -7
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/edom.h +10 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/logrep.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/edom.h +6 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/logrep.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/ser.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/logrep.h +6 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/ser.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/logrep.h +7 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/ser_euler.h +2 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/edom.h +6 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/logrep.h +2 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/ser.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cabs/formula.h +6 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacos/logrep.h +7 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacosh/logrep.h +6 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacot/logrep.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacoth/logrep.h +8 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsc/logrep.h +5 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsch/logrep.h +7 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/carg/formula.h +6 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casec/logrep.h +5 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casech/logrep.h +3 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casin/logrep.h +6 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/casinh/logrep.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catan/logrep.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/catanh/logrep.h +5 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/branch.h +40 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/formula.h +5 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccos/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccosh/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccot/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccoth/eulerf.h +4 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsc/eulerf.h +4 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsch/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp/eulerf.h +10 -7
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/branch.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/identity.h +17 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog/branch.h +11 -12
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog10/branch.h +53 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog10/formula.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog2/branch.h +53 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/clog2/formula.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/eulerf.h +6 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/ser.h +4 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/formula.h +5 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/ser.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/ser.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/eulerf.h +4 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/formula.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/ser.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cpow/formula.h +7 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/eulerf.h +4 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/ser.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/formula.h +2 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/ser.h +6 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csec/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csech/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csin/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csinh/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/branch.h +40 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/formula.h +13 -43
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctan/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/eulerf.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/branch.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/newton.h +4 -12
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/algo911.h +7 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/cf.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_inf.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_zero.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/algo911.h +5 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/cf.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/escalb/edf.h +2 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/builtin.h +7 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/edf.h +6 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/exp2/edf.h +9 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/expm1/branch.h +13 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/expm1/identity.h +18 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/expxt/edf.h +1 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/f_euler/formula.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/l2norm.h +5 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/mmm.h +1 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/ipow/edf.h +6 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/l2norm/formula.h +6 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/branch.h +6 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/builtin.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edf.h +8 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edom.h +10 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/mercator.h +7 -9
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log/ser_okumura.h +4 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/edf.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/mercator.h +9 -9
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/branch.h +8 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/ser_mercator.h +16 -6
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/branch.h +1 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/edf.h +3 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/mercator.h +9 -9
- data/ext/bigdecimal/math_r/internal/algo/bigmath/logxt/edf.h +6 -1
- data/ext/bigdecimal/math_r/internal/algo/bigmath/pow/formula.h +13 -8
- data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm10/edf.h +10 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm2/edf.h +11 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/ser.h +6 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/formula.h +8 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/ser.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/eulerf.h +5 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/ser.h +4 -5
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sincos/ser.h +9 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/formula.h +8 -4
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/ser.h +4 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sinhcosh/ser.h +10 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/builtin.h +2 -2
- data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/edom.h +1 -0
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/ser.h +3 -8
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/eulerf.h +5 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/formula.h +7 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/ser.h +3 -3
- data/ext/bigdecimal/math_r/internal/algo/bigmath/trig/f_euler.h +11 -5
- data/ext/bigdecimal/math_r/log.c +2 -2
- data/ext/bigdecimal/math_r/math_r/bigdecimal.h +5 -1
- data/ext/bigdecimal/math_r/math_r/bigmath.h +2 -0
- data/ext/bigdecimal/math_r/math_r/globals.h +1 -1
- data/ext/bigdecimal/math_r/math_r.c +5 -3
- data/lib/bigdecimal/math_r/const/E_euler.rb +46 -0
- data/lib/bigdecimal/math_r/version.rb +1 -1
- data/lib/bigdecimal/math_r.rb +1 -0
- data/lib/bigdecimal/math_r.so +0 -0
- metadata +20 -9
- data/.ruby-version +0 -1
@@ -2,11 +2,15 @@ VALUE
|
|
2
2
|
sinh_formula(VALUE x, VALUE prec)
|
3
3
|
{
|
4
4
|
const ID div = rb_intern("div");
|
5
|
-
VALUE n =
|
6
|
-
VALUE t = rb_bigmath_exp(x, n), y = Qundef;
|
7
|
-
VALUE two = rb_BigDecimal1(INT2FIX(2));
|
5
|
+
VALUE n, t, y = Qundef, two;
|
8
6
|
int sign;
|
9
7
|
|
8
|
+
rb_check_precise(prec);
|
9
|
+
n = rb_numdiff_make_n(prec);
|
10
|
+
|
11
|
+
t = rb_bigmath_exp(x, n);
|
12
|
+
two = rb_BigDecimal1(INT2FIX(2));
|
13
|
+
|
10
14
|
if (TYPE(t) == T_FIXNUM || TYPE(t) == T_BIGNUM)
|
11
15
|
{
|
12
16
|
y = rb_Rational(INT2FIX(1), t);
|
@@ -17,7 +21,7 @@ sinh_formula(VALUE x, VALUE prec)
|
|
17
21
|
y = sign == 1 ? BIG_INF : BIG_MINUS_INF;
|
18
22
|
else
|
19
23
|
{
|
20
|
-
y = rb_num_canonicalize(t,
|
24
|
+
y = rb_num_canonicalize(t, n, ARG_REAL, ARG_RECIPROCAL);
|
21
25
|
y = rb_funcall1(t, '-', y);
|
22
26
|
y = rb_funcall(y, div, 2, two, prec);
|
23
27
|
}
|
@@ -1,11 +1,12 @@
|
|
1
1
|
VALUE
|
2
2
|
sinh_ser(VALUE x, VALUE prec)
|
3
3
|
{
|
4
|
-
VALUE y = Qundef;
|
4
|
+
VALUE y = Qundef, n;
|
5
5
|
|
6
6
|
rb_check_precise(prec);
|
7
|
+
n = rb_numdiff_make_n(prec);
|
7
8
|
|
8
|
-
sinhcosh_ser(x,
|
9
|
+
sinhcosh_ser(x, n, &y, NULL);
|
9
10
|
|
10
|
-
return y;
|
11
|
+
return rb_num_round(y, prec);
|
11
12
|
}
|
@@ -10,9 +10,9 @@ sinhcosh_inline(VALUE x, VALUE prec, VALUE *sinh, VALUE *cosh)
|
|
10
10
|
w = BIG_ONE;
|
11
11
|
a = BIG_ONE;
|
12
12
|
y = BIG_ZERO;
|
13
|
-
|
14
13
|
if (sinh != NULL) *sinh = BIG_ZERO;
|
15
14
|
if (cosh != NULL) *cosh = BIG_ZERO;
|
15
|
+
|
16
16
|
while (rb_numdiff_condition_p(y, a, n, &m))
|
17
17
|
{
|
18
18
|
a = rb_funcall(w, div, 2, f, m);
|
@@ -27,10 +27,12 @@ sinhcosh_inline(VALUE x, VALUE prec, VALUE *sinh, VALUE *cosh)
|
|
27
27
|
w = rb_funcall1(w, '*', x);
|
28
28
|
f = rb_funcall1(f, '*', LONG2NUM(++i));
|
29
29
|
}
|
30
|
+
|
30
31
|
RB_GC_GUARD(f);
|
31
32
|
RB_GC_GUARD(w);
|
32
33
|
RB_GC_GUARD(a);
|
33
34
|
RB_GC_GUARD(y);
|
35
|
+
|
34
36
|
if (sinh != NULL) RB_GC_GUARD(*sinh);
|
35
37
|
if (cosh != NULL) RB_GC_GUARD(*cosh);
|
36
38
|
}
|
@@ -38,8 +40,13 @@ sinhcosh_inline(VALUE x, VALUE prec, VALUE *sinh, VALUE *cosh)
|
|
38
40
|
void
|
39
41
|
sinhcosh_ser(VALUE x, VALUE prec, VALUE *sinh, VALUE *cosh)
|
40
42
|
{
|
43
|
+
VALUE n;
|
41
44
|
int sign;
|
42
|
-
|
45
|
+
|
46
|
+
rb_check_precise(prec);
|
47
|
+
|
48
|
+
n = rb_numdiff_make_n(prec);
|
49
|
+
x = rb_num_canonicalize(x, n, ARG_REAL, ARG_RAWVALUE);
|
43
50
|
|
44
51
|
if (sinh == NULL && cosh == NULL) return;
|
45
52
|
|
@@ -63,7 +70,7 @@ sinhcosh_ser(VALUE x, VALUE prec, VALUE *sinh, VALUE *cosh)
|
|
63
70
|
}
|
64
71
|
else
|
65
72
|
{
|
66
|
-
sinhcosh_inline(x,
|
73
|
+
sinhcosh_inline(x, n, sinh, cosh);
|
67
74
|
if (sinh != NULL) *sinh = rb_num_round(*sinh, prec);
|
68
75
|
if (cosh != NULL) *cosh = rb_num_round(*cosh, prec);
|
69
76
|
}
|
@@ -5,8 +5,8 @@ sqrt_builtin(VALUE x, VALUE prec)
|
|
5
5
|
|
6
6
|
rb_check_precise(prec);
|
7
7
|
|
8
|
-
if (rb_num_negative_p(x) ||
|
8
|
+
if (rb_num_negative_p(x) || rb_num_nan_p(x))
|
9
9
|
return BIG_NAN;
|
10
10
|
|
11
|
-
return rb_funcall(x, sqrt, 1, prec);
|
11
|
+
return rb_num_round(rb_funcall(x, sqrt, 1, prec), prec);
|
12
12
|
}
|
@@ -1,11 +1,13 @@
|
|
1
1
|
VALUE
|
2
2
|
tan_eulerf(VALUE z, VALUE prec)
|
3
3
|
{
|
4
|
-
VALUE w;
|
4
|
+
VALUE w, n;
|
5
5
|
|
6
6
|
rb_check_precise(prec);
|
7
|
+
n = rb_numdiff_make_n(prec);
|
7
8
|
|
8
|
-
w = trig_f_euler(mf_tan, rb_ImaginaryZ(z, SIGN_PLUS),
|
9
|
+
w = trig_f_euler(mf_tan, rb_ImaginaryZ(z, SIGN_PLUS), n);
|
10
|
+
w = rb_num_real(w);
|
9
11
|
|
10
|
-
return
|
12
|
+
return rb_num_round(w, prec);
|
11
13
|
}
|
@@ -2,17 +2,12 @@ VALUE
|
|
2
2
|
tan_ser(VALUE x, VALUE prec)
|
3
3
|
{
|
4
4
|
const ID div = rb_intern("div");
|
5
|
-
VALUE sin, cos;
|
5
|
+
VALUE sin, cos, n;
|
6
6
|
|
7
7
|
rb_check_precise(prec);
|
8
|
+
n = rb_numdiff_make_n(prec);
|
8
9
|
|
9
|
-
|
10
|
-
return BIG_NAN;
|
11
|
-
rb_check_precise(prec);
|
12
|
-
x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
|
13
|
-
rb_bigmath_sincos(x, prec, &sin, &cos);
|
14
|
-
sin = rb_num_round(sin, prec);
|
15
|
-
cos = rb_num_round(cos, prec);
|
10
|
+
rb_bigmath_sincos(x, n, &sin, &cos);
|
16
11
|
|
17
12
|
return rb_funcall(sin, div, 2, cos, prec);
|
18
13
|
}
|
@@ -1,11 +1,13 @@
|
|
1
1
|
VALUE
|
2
2
|
tanh_eulerf(VALUE x, VALUE prec)
|
3
3
|
{
|
4
|
-
VALUE y;
|
4
|
+
VALUE y = Qundef, n;
|
5
5
|
|
6
6
|
rb_check_precise(prec);
|
7
|
+
n = rb_numdiff_make_n(prec);
|
7
8
|
|
8
|
-
y = rb_ImaginaryZ(trig_f_euler(mf_tan, x,
|
9
|
+
y = rb_ImaginaryZ(trig_f_euler(mf_tan, x, n), SIGN_PLUS);
|
10
|
+
y = rb_num_real(y);
|
9
11
|
|
10
|
-
return
|
12
|
+
return rb_num_round(y, prec);
|
11
13
|
}
|
@@ -4,11 +4,15 @@ tanh_formula(VALUE x, VALUE prec)
|
|
4
4
|
const ID pred = rb_intern("pred");
|
5
5
|
const ID succ = rb_intern("succ");
|
6
6
|
const ID div = rb_intern("div");
|
7
|
-
VALUE n =
|
8
|
-
VALUE two = rb_BigDecimal1(INT2FIX(2));
|
9
|
-
VALUE t = rb_bigmath_exp(rb_funcall1(x, '*', two), n), y = Qundef;
|
7
|
+
VALUE n, two, t, y = Qundef;
|
10
8
|
int sign;
|
11
9
|
|
10
|
+
rb_check_precise(prec);
|
11
|
+
n = rb_numdiff_make_n(prec);
|
12
|
+
|
13
|
+
two = rb_BigDecimal1(INT2FIX(2));
|
14
|
+
t = rb_bigmath_exp(rb_funcall1(x, '*', two), n);
|
15
|
+
|
12
16
|
if (TYPE(t) == T_FIXNUM || TYPE(t) == T_BIGNUM)
|
13
17
|
{
|
14
18
|
y = rb_Rational(rb_funcall(t, pred, 0), rb_funcall(t, succ, 0));
|
@@ -1,13 +1,13 @@
|
|
1
1
|
VALUE
|
2
2
|
tanh_ser(VALUE x, VALUE prec)
|
3
3
|
{
|
4
|
-
VALUE y = Qundef, sinh = Qundef, cosh = Qundef;
|
4
|
+
VALUE y = Qundef, sinh = Qundef, cosh = Qundef, n;
|
5
5
|
const ID div = rb_intern("div");
|
6
6
|
|
7
7
|
rb_check_precise(prec);
|
8
|
+
n = rb_numdiff_make_n(prec);
|
8
9
|
|
9
|
-
sinhcosh_ser(x,
|
10
|
-
|
10
|
+
sinhcosh_ser(x, n, &sinh, &cosh);
|
11
11
|
y = rb_funcall(sinh, div, 2, cosh, prec);
|
12
12
|
|
13
13
|
return y;
|
@@ -263,18 +263,24 @@ f_euler_esc(const ID func, VALUE z, VALUE prec)
|
|
263
263
|
VALUE
|
264
264
|
trig_f_euler(const ID func, VALUE theta, VALUE prec)
|
265
265
|
{
|
266
|
-
VALUE h = Qundef, sc = Qundef;
|
266
|
+
VALUE h = Qundef, sc = Qundef, n;
|
267
|
+
|
268
|
+
rb_check_precise(prec);
|
269
|
+
n = rb_numdiff_make_n(prec);
|
270
|
+
|
267
271
|
if (rb_num_nan_p(theta))
|
268
272
|
return rb_Complex(BIG_NAN, BIG_NAN);
|
269
273
|
if (rb_num_zero_p(rb_num_imag(theta)))
|
270
274
|
{
|
271
|
-
h = f_euler_h(func, theta,
|
275
|
+
h = f_euler_h(func, theta, n);
|
276
|
+
h = rb_num_round(h, prec);
|
272
277
|
if (rb_num_nan_p(h))
|
273
278
|
return h;
|
274
279
|
}
|
275
280
|
if (rb_num_zero_p(rb_num_real(theta)))
|
276
281
|
{
|
277
|
-
sc = f_euler_sc(func, theta,
|
282
|
+
sc = f_euler_sc(func, theta, n);
|
283
|
+
sc = rb_num_round(sc, prec);
|
278
284
|
if (rb_num_nan_p(sc))
|
279
285
|
return sc;
|
280
286
|
}
|
@@ -284,7 +290,7 @@ trig_f_euler(const ID func, VALUE theta, VALUE prec)
|
|
284
290
|
return sc;
|
285
291
|
else
|
286
292
|
{
|
287
|
-
VALUE y = f_euler_esc(func, theta,
|
288
|
-
return y;
|
293
|
+
VALUE y = f_euler_esc(func, theta, n);
|
294
|
+
return rb_num_round(y, prec);
|
289
295
|
}
|
290
296
|
}
|
data/ext/bigdecimal/math_r/log.c
CHANGED
@@ -201,7 +201,7 @@ __impl_clog_formula(VALUE unused_obj, VALUE z, VALUE prec)
|
|
201
201
|
static VALUE
|
202
202
|
__impl_clog2_formula(VALUE unused_obj, VALUE z, VALUE prec)
|
203
203
|
{
|
204
|
-
return
|
204
|
+
return clog2_branch(z, prec, clog2_formula);
|
205
205
|
}
|
206
206
|
|
207
207
|
/**
|
@@ -220,7 +220,7 @@ __impl_clog2_formula(VALUE unused_obj, VALUE z, VALUE prec)
|
|
220
220
|
static VALUE
|
221
221
|
__impl_clog10_formula(VALUE unused_obj, VALUE z, VALUE prec)
|
222
222
|
{
|
223
|
-
return
|
223
|
+
return clog10_branch(z, prec, clog10_formula);
|
224
224
|
}
|
225
225
|
|
226
226
|
|
@@ -1,8 +1,12 @@
|
|
1
1
|
#ifndef INTERNAL_API_BIGDECIMAL
|
2
2
|
#define INTERNAL_API_BIGDECIMAL
|
3
3
|
|
4
|
-
|
4
|
+
/**
|
5
|
+
* Query the Parameter `prec` that is in valid range $p \lt 0$.
|
6
|
+
* if invalid range, error occurrd.
|
7
|
+
*/
|
5
8
|
void rb_check_precise(VALUE prec);
|
9
|
+
#define CheckPrecise(prec) rb_check_precise(prec)
|
6
10
|
|
7
11
|
VALUE rb_big_zero(void);
|
8
12
|
#define BIG_ZERO rb_big_zero()
|
@@ -5,6 +5,7 @@
|
|
5
5
|
#define DEF_PREC 1000
|
6
6
|
#define BIGMATH_PI "$M_PI"
|
7
7
|
#define BIGMATH_E "$M_E"
|
8
|
+
#define BIGMATH_EulerGamma "$M_EulerGamma"
|
8
9
|
#define BIGMATH_LOG2 "$M_LOG2"
|
9
10
|
#define BIGMATH_LOG10 "$M_LOG10"
|
10
11
|
#define BIGMATH_LOG_PI "$M_LOG_PI"
|
@@ -21,6 +22,7 @@ VALUE rb_bigmath_const(const char *gv, VALUE (*func)(VALUE prec), VALUE prec);
|
|
21
22
|
VALUE rb_bigmath_const_pi(VALUE prec);
|
22
23
|
VALUE rb_bigmath_const_log_pi(VALUE prec);
|
23
24
|
VALUE rb_bigmath_const_e(VALUE prec);
|
25
|
+
VALUE rb_bigmath_const_euler_gamma(VALUE prec);
|
24
26
|
VALUE rb_bigmath_const_log2(VALUE prec);
|
25
27
|
VALUE rb_bigmath_const_log10(VALUE prec);
|
26
28
|
VALUE rb_bigmath_const_sqrt2(VALUE prec);
|
@@ -23,7 +23,7 @@ RUBY_EXT_EXTERN VALUE rb_mComplexPlane;
|
|
23
23
|
RUBY_EXT_EXTERN VALUE rb_mEulerF;
|
24
24
|
RUBY_EXT_EXTERN VALUE rb_mLogRep;
|
25
25
|
RUBY_EXT_EXTERN VALUE rb_mPower;
|
26
|
-
RUBY_EXT_EXTERN VALUE
|
26
|
+
RUBY_EXT_EXTERN VALUE rb_mGammaBeta;
|
27
27
|
RUBY_EXT_EXTERN VALUE rb_mErf;
|
28
28
|
RUBY_EXT_EXTERN VALUE rb_mSolver;
|
29
29
|
|
@@ -21,7 +21,7 @@ void InitVM_EulerF(void);
|
|
21
21
|
void InitVM_LogRep(void);
|
22
22
|
void InitVM_Power(void);
|
23
23
|
void InitVM_Erf(void);
|
24
|
-
void
|
24
|
+
void InitVM_GammaBeta(void);
|
25
25
|
void InitVM_Solver(void);
|
26
26
|
|
27
27
|
/**
|
@@ -36,8 +36,10 @@ void InitVM_Solver(void);
|
|
36
36
|
void
|
37
37
|
Init_math_r(void)
|
38
38
|
{
|
39
|
+
|
39
40
|
rb_gv_set(BIGMATH_PI, Qnil);
|
40
41
|
rb_gv_set(BIGMATH_E, Qnil);
|
42
|
+
rb_gv_set(BIGMATH_EulerGamma, Qnil);
|
41
43
|
rb_gv_set(BIGMATH_LOG2, Qnil);
|
42
44
|
rb_gv_set(BIGMATH_LOG10, Qnil);
|
43
45
|
rb_gv_set(BIGMATH_LOG_PI, Qnil);
|
@@ -130,8 +132,8 @@ Init_math_r(void)
|
|
130
132
|
rb_mErf = rb_define_module_under(rb_mBigMathR, "Erf");
|
131
133
|
InitVM(Erf);
|
132
134
|
|
133
|
-
|
134
|
-
InitVM(
|
135
|
+
rb_mGammaBeta = rb_define_module_under(rb_mBigMathR, "GammaBeta");
|
136
|
+
InitVM(GammaBeta);
|
135
137
|
|
136
138
|
rb_mSolver = rb_define_module_under(rb_mBigMathR, "Solver");
|
137
139
|
InitVM(Solver);
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BigMathR
|
4
|
+
module Const
|
5
|
+
module E
|
6
|
+
module_function
|
7
|
+
# Implement by continued fraction.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# BigMathR::Const::E.euler(20)
|
11
|
+
# #=> 0.271828182845904523536e1
|
12
|
+
# @param prec [Integer] Arbitrary precision
|
13
|
+
# @return [BigDecimal] Constant e.
|
14
|
+
# @raise [TypeError] not an Integer
|
15
|
+
# @raise [RangeError] Zero or negative precision
|
16
|
+
def euler(prec)
|
17
|
+
raise TypeError, "precision must be in Integer" unless prec.class == Integer
|
18
|
+
raise RangeError, "Zero or negative precision" if prec <= 0
|
19
|
+
n = BigDecimal.double_fig + prec
|
20
|
+
|
21
|
+
zero = BigDecimal(0)
|
22
|
+
one = BigDecimal(1)
|
23
|
+
two = BigDecimal(2)
|
24
|
+
|
25
|
+
c = one
|
26
|
+
b = one
|
27
|
+
p1 = one; q1 = zero; p2 = two; q2 = one;
|
28
|
+
i = one
|
29
|
+
loop do
|
30
|
+
prev = p2
|
31
|
+
t = p1 * c + p2 * b; p1 = p2; p2 = t;
|
32
|
+
t = q1 * c + q2 * b; q1 = q2; q2 = t;
|
33
|
+
if q2.nonzero?
|
34
|
+
p1 = p1.div(q2, n); q1 = q1.div(q2, n); p2 = p2.div(q2, n); q2 = one;
|
35
|
+
end
|
36
|
+
i += one
|
37
|
+
c = one
|
38
|
+
b = (i + one) % 3 == 0 ? ((i.to_i.succ) / 3) * two : one
|
39
|
+
break unless q2.nonzero? && prev != p2
|
40
|
+
end
|
41
|
+
p2.round(prec)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
data/lib/bigdecimal/math_r.rb
CHANGED
@@ -4,6 +4,7 @@ require 'bigdecimal/math'
|
|
4
4
|
require_relative './math_r.so'
|
5
5
|
|
6
6
|
require_relative 'math_r/version'
|
7
|
+
require_relative 'math_r/const/E_euler'
|
7
8
|
require_relative 'math_r/const/PI_chudnovsky'
|
8
9
|
require_relative 'math_r/const/PI_euler'
|
9
10
|
require_relative 'math_r/const/PI_ramanujan1'
|
data/lib/bigdecimal/math_r.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigdecimal-math_r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tribusonz-2
|
@@ -27,16 +27,16 @@ dependencies:
|
|
27
27
|
name: rake
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
|
-
- - "
|
30
|
+
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '0'
|
32
|
+
version: '13.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
39
|
+
version: '13.0'
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rake-compiler
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,7 +59,6 @@ extensions:
|
|
59
59
|
- ext/bigdecimal/math_r/extconf.rb
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- ".ruby-version"
|
63
62
|
- CODE_OF_CONDUCT.md
|
64
63
|
- LICENSE
|
65
64
|
- README.md
|
@@ -87,6 +86,7 @@ files:
|
|
87
86
|
- ext/bigdecimal/math_r/api/bigmath/clog.h
|
88
87
|
- ext/bigdecimal/math_r/api/bigmath/const.h
|
89
88
|
- ext/bigdecimal/math_r/api/bigmath/const_e.h
|
89
|
+
- ext/bigdecimal/math_r/api/bigmath/const_euler_gamma.h
|
90
90
|
- ext/bigdecimal/math_r/api/bigmath/const_log10.h
|
91
91
|
- ext/bigdecimal/math_r/api/bigmath/const_log2.h
|
92
92
|
- ext/bigdecimal/math_r/api/bigmath/const_log_pi.h
|
@@ -140,9 +140,10 @@ files:
|
|
140
140
|
- ext/bigdecimal/math_r/euler_f.c
|
141
141
|
- ext/bigdecimal/math_r/exp.c
|
142
142
|
- ext/bigdecimal/math_r/extconf.rb
|
143
|
-
- ext/bigdecimal/math_r/
|
143
|
+
- ext/bigdecimal/math_r/gamma_beta.c
|
144
144
|
- ext/bigdecimal/math_r/hyperb.c
|
145
|
-
- ext/bigdecimal/math_r/internal/algo/bigmath/E/
|
145
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/E/napier.h
|
146
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/EulerGamma/borwein_bailey.h
|
146
147
|
- ext/bigdecimal/math_r/internal/algo/bigmath/LOG10/ser.h
|
147
148
|
- ext/bigdecimal/math_r/internal/algo/bigmath/LOG2/BBP2002.h
|
148
149
|
- ext/bigdecimal/math_r/internal/algo/bigmath/LOG_PI/builtin.h
|
@@ -213,6 +214,7 @@ files:
|
|
213
214
|
- ext/bigdecimal/math_r/internal/algo/bigmath/catan/logrep.h
|
214
215
|
- ext/bigdecimal/math_r/internal/algo/bigmath/catanh/branch.h
|
215
216
|
- ext/bigdecimal/math_r/internal/algo/bigmath/catanh/logrep.h
|
217
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/branch.h
|
216
218
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/formula.h
|
217
219
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ccos/branch.h
|
218
220
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ccos/eulerf.h
|
@@ -230,10 +232,14 @@ files:
|
|
230
232
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cexp/eulerf.h
|
231
233
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/branch.h
|
232
234
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/eulerf.h
|
235
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/branch.h
|
236
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/identity.h
|
233
237
|
- ext/bigdecimal/math_r/internal/algo/bigmath/clog/branch.h
|
234
238
|
- ext/bigdecimal/math_r/internal/algo/bigmath/clog/formula.h
|
239
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/clog10/branch.h
|
235
240
|
- ext/bigdecimal/math_r/internal/algo/bigmath/clog10/formula.h
|
236
241
|
- ext/bigdecimal/math_r/internal/algo/bigmath/clog1p/branch.h
|
242
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/clog2/branch.h
|
237
243
|
- ext/bigdecimal/math_r/internal/algo/bigmath/clog2/formula.h
|
238
244
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cos/branch.h
|
239
245
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cos/eulerf.h
|
@@ -265,11 +271,13 @@ files:
|
|
265
271
|
- ext/bigdecimal/math_r/internal/algo/bigmath/csin/eulerf.h
|
266
272
|
- ext/bigdecimal/math_r/internal/algo/bigmath/csinh/branch.h
|
267
273
|
- ext/bigdecimal/math_r/internal/algo/bigmath/csinh/eulerf.h
|
274
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/branch.h
|
268
275
|
- ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/formula.h
|
269
276
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ctan/branch.h
|
270
277
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ctan/eulerf.h
|
271
278
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/branch.h
|
272
279
|
- ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/eulerf.h
|
280
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/branch.h
|
273
281
|
- ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/newton.h
|
274
282
|
- ext/bigdecimal/math_r/internal/algo/bigmath/erf/algo911.h
|
275
283
|
- ext/bigdecimal/math_r/internal/algo/bigmath/erf/branch.h
|
@@ -285,6 +293,8 @@ files:
|
|
285
293
|
- ext/bigdecimal/math_r/internal/algo/bigmath/exp/edf.h
|
286
294
|
- ext/bigdecimal/math_r/internal/algo/bigmath/exp2/branch.h
|
287
295
|
- ext/bigdecimal/math_r/internal/algo/bigmath/exp2/edf.h
|
296
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/expm1/branch.h
|
297
|
+
- ext/bigdecimal/math_r/internal/algo/bigmath/expm1/identity.h
|
288
298
|
- ext/bigdecimal/math_r/internal/algo/bigmath/expxt/edf.h
|
289
299
|
- ext/bigdecimal/math_r/internal/algo/bigmath/f_euler/formula.h
|
290
300
|
- ext/bigdecimal/math_r/internal/algo/bigmath/hypot/branch.h
|
@@ -357,6 +367,7 @@ files:
|
|
357
367
|
- ext/bigdecimal/math_r/trig.c
|
358
368
|
- lib/bigdecimal/math_r.rb
|
359
369
|
- lib/bigdecimal/math_r.so
|
370
|
+
- lib/bigdecimal/math_r/const/E_euler.rb
|
360
371
|
- lib/bigdecimal/math_r/const/EulerGamma_engel.rb
|
361
372
|
- lib/bigdecimal/math_r/const/LOG2_bbp2007.rb
|
362
373
|
- lib/bigdecimal/math_r/const/PI_chudnovsky.rb
|
@@ -387,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
387
398
|
- !ruby/object:Gem::Version
|
388
399
|
version: '0'
|
389
400
|
requirements: []
|
390
|
-
rubygems_version: 3.
|
401
|
+
rubygems_version: 3.7.2
|
391
402
|
specification_version: 4
|
392
403
|
summary: Refined Math for BigDecimal
|
393
404
|
test_files: []
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.4.3
|