bigdecimal-math_r 0.2.1 → 0.2.2

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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/changelog.md +14 -0
  3. data/ext/bigdecimal/math_r/algofunc.h +11 -1
  4. data/ext/bigdecimal/math_r/api/bigmath/const_e.h +1 -1
  5. data/ext/bigdecimal/math_r/api/bigmath/const_euler_gamma.h +5 -0
  6. data/ext/bigdecimal/math_r/api/bigmath/csqrt.h +1 -1
  7. data/ext/bigdecimal/math_r/api/kernel/rb_BigDecimal_flo.h +8 -2
  8. data/ext/bigdecimal/math_r/api/numeric/nan_p.h +4 -1
  9. data/ext/bigdecimal/math_r/api.h +2 -0
  10. data/ext/bigdecimal/math_r/const.c +42 -5
  11. data/ext/bigdecimal/math_r/decl.h +11 -1
  12. data/ext/bigdecimal/math_r/exp.c +45 -3
  13. data/ext/bigdecimal/math_r/extconf.rb +5 -1
  14. data/ext/bigdecimal/math_r/{gamma_r.c → gamma_beta.c} +11 -78
  15. data/ext/bigdecimal/math_r/internal/algo/bigmath/E/{ser.h → napier.h} +1 -1
  16. data/ext/bigdecimal/math_r/internal/algo/bigmath/EulerGamma/borwein_bailey.h +37 -0
  17. data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG10/ser.h +4 -2
  18. data/ext/bigdecimal/math_r/internal/algo/bigmath/LOG_PI/builtin.h +3 -1
  19. data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT2/builtin.h +4 -1
  20. data/ext/bigdecimal/math_r/internal/algo/bigmath/SQRT3/builtin.h +4 -1
  21. data/ext/bigdecimal/math_r/internal/algo/bigmath/acosh/edom.h +7 -5
  22. data/ext/bigdecimal/math_r/internal/algo/bigmath/acot/logrep.h +9 -6
  23. data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/edom.h +4 -3
  24. data/ext/bigdecimal/math_r/internal/algo/bigmath/acoth/logrep.h +5 -2
  25. data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/edom.h +7 -6
  26. data/ext/bigdecimal/math_r/internal/algo/bigmath/acsc/logrep.h +6 -5
  27. data/ext/bigdecimal/math_r/internal/algo/bigmath/acsch/logrep.h +7 -6
  28. data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/edom.h +7 -6
  29. data/ext/bigdecimal/math_r/internal/algo/bigmath/asec/logrep.h +8 -7
  30. data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/edom.h +10 -6
  31. data/ext/bigdecimal/math_r/internal/algo/bigmath/asech/logrep.h +3 -2
  32. data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/edom.h +6 -5
  33. data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/logrep.h +3 -2
  34. data/ext/bigdecimal/math_r/internal/algo/bigmath/asin/ser.h +1 -0
  35. data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/logrep.h +6 -5
  36. data/ext/bigdecimal/math_r/internal/algo/bigmath/asinh/ser.h +1 -0
  37. data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/logrep.h +7 -6
  38. data/ext/bigdecimal/math_r/internal/algo/bigmath/atan/ser_euler.h +2 -0
  39. data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/edom.h +6 -3
  40. data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/logrep.h +2 -0
  41. data/ext/bigdecimal/math_r/internal/algo/bigmath/atanh/ser.h +1 -0
  42. data/ext/bigdecimal/math_r/internal/algo/bigmath/cabs/formula.h +6 -2
  43. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacos/logrep.h +7 -4
  44. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacosh/logrep.h +6 -5
  45. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacot/logrep.h +3 -2
  46. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacoth/logrep.h +8 -4
  47. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsc/logrep.h +5 -4
  48. data/ext/bigdecimal/math_r/internal/algo/bigmath/cacsch/logrep.h +7 -3
  49. data/ext/bigdecimal/math_r/internal/algo/bigmath/carg/formula.h +6 -2
  50. data/ext/bigdecimal/math_r/internal/algo/bigmath/casec/logrep.h +5 -4
  51. data/ext/bigdecimal/math_r/internal/algo/bigmath/casech/logrep.h +3 -1
  52. data/ext/bigdecimal/math_r/internal/algo/bigmath/casin/logrep.h +6 -4
  53. data/ext/bigdecimal/math_r/internal/algo/bigmath/casinh/logrep.h +1 -0
  54. data/ext/bigdecimal/math_r/internal/algo/bigmath/catan/logrep.h +3 -2
  55. data/ext/bigdecimal/math_r/internal/algo/bigmath/catanh/logrep.h +5 -2
  56. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/branch.h +40 -0
  57. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccbrt/formula.h +5 -2
  58. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccos/eulerf.h +4 -3
  59. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccosh/eulerf.h +4 -3
  60. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccot/eulerf.h +5 -3
  61. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccoth/eulerf.h +4 -2
  62. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsc/eulerf.h +4 -2
  63. data/ext/bigdecimal/math_r/internal/algo/bigmath/ccsch/eulerf.h +5 -3
  64. data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp/eulerf.h +10 -7
  65. data/ext/bigdecimal/math_r/internal/algo/bigmath/cexp2/eulerf.h +5 -3
  66. data/ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/branch.h +13 -0
  67. data/ext/bigdecimal/math_r/internal/algo/bigmath/cexpm1/identity.h +17 -0
  68. data/ext/bigdecimal/math_r/internal/algo/bigmath/clog/branch.h +11 -12
  69. data/ext/bigdecimal/math_r/internal/algo/bigmath/clog10/branch.h +53 -0
  70. data/ext/bigdecimal/math_r/internal/algo/bigmath/clog10/formula.h +4 -3
  71. data/ext/bigdecimal/math_r/internal/algo/bigmath/clog2/branch.h +53 -0
  72. data/ext/bigdecimal/math_r/internal/algo/bigmath/clog2/formula.h +4 -3
  73. data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/eulerf.h +6 -4
  74. data/ext/bigdecimal/math_r/internal/algo/bigmath/cos/ser.h +4 -4
  75. data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/eulerf.h +5 -3
  76. data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/formula.h +5 -5
  77. data/ext/bigdecimal/math_r/internal/algo/bigmath/cosh/ser.h +4 -3
  78. data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/eulerf.h +5 -3
  79. data/ext/bigdecimal/math_r/internal/algo/bigmath/cot/ser.h +3 -2
  80. data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/eulerf.h +4 -2
  81. data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/formula.h +1 -0
  82. data/ext/bigdecimal/math_r/internal/algo/bigmath/coth/ser.h +3 -2
  83. data/ext/bigdecimal/math_r/internal/algo/bigmath/cpow/formula.h +7 -6
  84. data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/eulerf.h +4 -2
  85. data/ext/bigdecimal/math_r/internal/algo/bigmath/csc/ser.h +5 -3
  86. data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/eulerf.h +5 -3
  87. data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/formula.h +2 -2
  88. data/ext/bigdecimal/math_r/internal/algo/bigmath/csch/ser.h +6 -3
  89. data/ext/bigdecimal/math_r/internal/algo/bigmath/csec/eulerf.h +5 -3
  90. data/ext/bigdecimal/math_r/internal/algo/bigmath/csech/eulerf.h +5 -3
  91. data/ext/bigdecimal/math_r/internal/algo/bigmath/csin/eulerf.h +4 -3
  92. data/ext/bigdecimal/math_r/internal/algo/bigmath/csinh/eulerf.h +4 -3
  93. data/ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/branch.h +40 -0
  94. data/ext/bigdecimal/math_r/internal/algo/bigmath/csqrt/formula.h +13 -43
  95. data/ext/bigdecimal/math_r/internal/algo/bigmath/ctan/eulerf.h +4 -3
  96. data/ext/bigdecimal/math_r/internal/algo/bigmath/ctanh/eulerf.h +4 -3
  97. data/ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/branch.h +18 -0
  98. data/ext/bigdecimal/math_r/internal/algo/bigmath/cuberoot/newton.h +4 -12
  99. data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/algo911.h +7 -4
  100. data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/cf.h +1 -0
  101. data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_inf.h +1 -0
  102. data/ext/bigdecimal/math_r/internal/algo/bigmath/erf/ser_zero.h +1 -0
  103. data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/algo911.h +5 -2
  104. data/ext/bigdecimal/math_r/internal/algo/bigmath/erfc/cf.h +1 -0
  105. data/ext/bigdecimal/math_r/internal/algo/bigmath/escalb/edf.h +2 -0
  106. data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/builtin.h +7 -1
  107. data/ext/bigdecimal/math_r/internal/algo/bigmath/exp/edf.h +6 -5
  108. data/ext/bigdecimal/math_r/internal/algo/bigmath/exp2/edf.h +9 -5
  109. data/ext/bigdecimal/math_r/internal/algo/bigmath/expm1/branch.h +13 -0
  110. data/ext/bigdecimal/math_r/internal/algo/bigmath/expm1/identity.h +18 -0
  111. data/ext/bigdecimal/math_r/internal/algo/bigmath/expxt/edf.h +1 -1
  112. data/ext/bigdecimal/math_r/internal/algo/bigmath/f_euler/formula.h +3 -2
  113. data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/l2norm.h +5 -4
  114. data/ext/bigdecimal/math_r/internal/algo/bigmath/hypot/mmm.h +1 -1
  115. data/ext/bigdecimal/math_r/internal/algo/bigmath/ipow/edf.h +6 -4
  116. data/ext/bigdecimal/math_r/internal/algo/bigmath/l2norm/formula.h +6 -1
  117. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/branch.h +6 -2
  118. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/builtin.h +3 -2
  119. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edf.h +8 -5
  120. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/edom.h +10 -4
  121. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/mercator.h +7 -9
  122. data/ext/bigdecimal/math_r/internal/algo/bigmath/log/ser_okumura.h +4 -1
  123. data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/edf.h +3 -2
  124. data/ext/bigdecimal/math_r/internal/algo/bigmath/log10/mercator.h +9 -9
  125. data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/branch.h +8 -5
  126. data/ext/bigdecimal/math_r/internal/algo/bigmath/log1p/ser_mercator.h +16 -6
  127. data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/branch.h +1 -1
  128. data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/edf.h +3 -2
  129. data/ext/bigdecimal/math_r/internal/algo/bigmath/log2/mercator.h +9 -9
  130. data/ext/bigdecimal/math_r/internal/algo/bigmath/logxt/edf.h +6 -1
  131. data/ext/bigdecimal/math_r/internal/algo/bigmath/pow/formula.h +13 -8
  132. data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm10/edf.h +10 -4
  133. data/ext/bigdecimal/math_r/internal/algo/bigmath/rcm2/edf.h +11 -3
  134. data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/eulerf.h +5 -3
  135. data/ext/bigdecimal/math_r/internal/algo/bigmath/sec/ser.h +6 -4
  136. data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/eulerf.h +5 -3
  137. data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/formula.h +8 -4
  138. data/ext/bigdecimal/math_r/internal/algo/bigmath/sech/ser.h +5 -3
  139. data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/eulerf.h +5 -2
  140. data/ext/bigdecimal/math_r/internal/algo/bigmath/sin/ser.h +4 -5
  141. data/ext/bigdecimal/math_r/internal/algo/bigmath/sincos/ser.h +9 -2
  142. data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/eulerf.h +5 -3
  143. data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/formula.h +8 -4
  144. data/ext/bigdecimal/math_r/internal/algo/bigmath/sinh/ser.h +4 -3
  145. data/ext/bigdecimal/math_r/internal/algo/bigmath/sinhcosh/ser.h +10 -3
  146. data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/builtin.h +2 -2
  147. data/ext/bigdecimal/math_r/internal/algo/bigmath/sqrt/edom.h +1 -0
  148. data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/eulerf.h +5 -3
  149. data/ext/bigdecimal/math_r/internal/algo/bigmath/tan/ser.h +3 -8
  150. data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/eulerf.h +5 -3
  151. data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/formula.h +7 -3
  152. data/ext/bigdecimal/math_r/internal/algo/bigmath/tanh/ser.h +3 -3
  153. data/ext/bigdecimal/math_r/internal/algo/bigmath/trig/f_euler.h +11 -5
  154. data/ext/bigdecimal/math_r/log.c +2 -2
  155. data/ext/bigdecimal/math_r/math_r/bigdecimal.h +5 -1
  156. data/ext/bigdecimal/math_r/math_r/bigmath.h +2 -0
  157. data/ext/bigdecimal/math_r/math_r/globals.h +1 -1
  158. data/ext/bigdecimal/math_r/math_r.c +5 -3
  159. data/lib/bigdecimal/math_r/const/E_euler.rb +46 -0
  160. data/lib/bigdecimal/math_r/version.rb +1 -1
  161. data/lib/bigdecimal/math_r.rb +1 -0
  162. metadata +20 -10
  163. data/.ruby-version +0 -1
  164. data/lib/bigdecimal/math_r.so +0 -0
@@ -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, prec, &y, NULL);
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
- x = rb_num_canonicalize(x, prec, ARG_REAL, ARG_RAWVALUE);
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, prec, sinh, cosh);
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) || rb_num_notequal_p(x, 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
  }
@@ -5,5 +5,6 @@ sqrt_edom(VALUE x, VALUE prec)
5
5
  RUBY_ASSERT(rb_num_negative_p(x));
6
6
  x = rb_num_uminus(x);
7
7
  imag = rb_bigmath_sqrt(x, prec);
8
+
8
9
  return rb_num_round(rb_Complex(BIG_ZERO, imag), prec);
9
10
  }
@@ -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), prec);
9
+ w = trig_f_euler(mf_tan, rb_ImaginaryZ(z, SIGN_PLUS), n);
10
+ w = rb_num_real(w);
9
11
 
10
- return rb_num_real(w);
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
- if (!rb_num_finite_p(x))
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, prec), SIGN_PLUS);
9
+ y = rb_ImaginaryZ(trig_f_euler(mf_tan, x, n), SIGN_PLUS);
10
+ y = rb_num_real(y);
9
11
 
10
- return rb_num_real(y);
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 = rb_numdiff_make_n(prec);
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, prec, &sinh, &cosh);
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, prec);
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, prec);
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, prec);
288
- return y;
293
+ VALUE y = f_euler_esc(func, theta, n);
294
+ return rb_num_round(y, prec);
289
295
  }
290
296
  }
@@ -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 clog_branch(z, prec, clog2_formula);
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 clog_branch(z, prec, clog10_formula);
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
- /* API for BigDecimal */
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 rb_mGammaR;
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 InitVM_GammaR(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
- rb_mGammaR = rb_define_module_under(rb_mBigMathR, "GammaR");
134
- InitVM(GammaR);
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
+
@@ -2,6 +2,6 @@
2
2
 
3
3
  module BigMathR
4
4
  # Module version.
5
- VERSION = "0.2.1"
5
+ VERSION = "0.2.2"
6
6
  end
7
7
 
@@ -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'
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.1
4
+ version: 0.2.2
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/gamma_r.c
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/ser.h
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
@@ -356,7 +366,7 @@ files:
356
366
  - ext/bigdecimal/math_r/solver.c
357
367
  - ext/bigdecimal/math_r/trig.c
358
368
  - lib/bigdecimal/math_r.rb
359
- - lib/bigdecimal/math_r.so
369
+ - lib/bigdecimal/math_r/const/E_euler.rb
360
370
  - lib/bigdecimal/math_r/const/EulerGamma_engel.rb
361
371
  - lib/bigdecimal/math_r/const/LOG2_bbp2007.rb
362
372
  - lib/bigdecimal/math_r/const/PI_chudnovsky.rb
@@ -387,7 +397,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
387
397
  - !ruby/object:Gem::Version
388
398
  version: '0'
389
399
  requirements: []
390
- rubygems_version: 3.6.7
400
+ rubygems_version: 3.7.2
391
401
  specification_version: 4
392
402
  summary: Refined Math for BigDecimal
393
403
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.4.3
Binary file