gmp 0.4.3-x86-mingw32 → 0.4.7-x86-mingw32

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ 0.4.7:
2
+ * Added 6 MPFR trig methods, plus eint, li2, gamma, lngamma, zeta, erf, erfc,
3
+ j0, j1, jn, y0, y1, and yn.
4
+ * Completely fixed the rounding constants. They are now objects, sporting name,
5
+ mode, and ieee754 reader methods.
6
+ * Added 4 MPFR "constants". Their values can change based on precision and
7
+ rounding mode. const_log2, const_pi, const_euler, const_catalan.
8
+ * Added GMP::Z.eql? and GMP::Z.hash to allow GMP::Z objects to be proper keys
9
+ in a hash
10
+ * "Completed" documentation of GMP::Z.
11
+ * Started documentation of GMP::Q.
12
+ * Tests now for GMP::Q.to_s.
13
+ * Unit test results: 84 tests, 1378 assertions, 0 failures, 0 errors
14
+ * Unit test results: 74 tests, 719 assertions, 0 failures, 0 errors (w/o MPFR)
15
+
1
16
  0.4.3:
2
17
  * Support for MPFR on Windows introduced. gmp-x86-mswin32 gem should be used.
3
18
  * Removed compilation warnings when using MPFR
@@ -6,7 +21,7 @@
6
21
  * Added MPFR rounding constants. These will be changed soon though.
7
22
  * Added MPFR tests adapted straight from the MPFR library, just tsqrt so far.
8
23
  * Added 3x MPFR functions: sec(), csc(), cot().
9
- * Added function existence tests from
24
+ * Added function existence tests
10
25
  * Unit test results: 78 tests, 1025 assertions, 0 failures, 0 errors
11
26
  * Unit test results: 72 tests, 593 assertions, 0 failures, 0 errors (w/o MPFR)
12
27
 
data/README.rdoc CHANGED
@@ -161,6 +161,7 @@ You can also call them as:
161
161
  scan0,scan1 starting at bitnr (1st arg), scan for a 0 or 1
162
162
  (respectively), then return the index of the
163
163
  first instance.
164
+ cmpabs comparison of absolute value
164
165
  com 2's complement
165
166
  com! in-place 2's complement
166
167
  &,|,^ logical operations: and, or, xor
@@ -230,10 +231,25 @@ You can also call them as:
230
231
  log2 binary logarithm of object
231
232
  log10 decimal logarithm of object
232
233
  exp e^object
234
+ exp2 2^object
235
+ exp10 10^object
233
236
  log1p the same as (object + 1).log, with better
234
237
  precision
235
238
  expm1 the same as (object.exp) - 1, with better
236
239
  precision
240
+ eint exponential integral of object
241
+ li2 real part of the dilogarithm of object
242
+ gamma Gamma fucntion of object
243
+ lngamma logarithm of the Gamma function of object
244
+ zeta Reimann Zeta function of object
245
+ erf error function of object
246
+ erfc complementary error function of object
247
+ j0 first kind Bessel function of order 0 of object
248
+ j1 first kind Bessel function of order 1 of object
249
+ jn first kind Bessel function of order n of object
250
+ y0 second kind Bessel function of order 0 of object
251
+ y1 second kind Bessel function of order 1 of object
252
+ yn second kind Bessel function of order n of object
237
253
  cos \
238
254
  sin |
239
255
  tan |
@@ -246,6 +262,9 @@ You can also call them as:
246
262
  cosh | of the object
247
263
  sinh |
248
264
  tanh |
265
+ sec |
266
+ csc |
267
+ cot |
249
268
  aconh |
250
269
  asinh |
251
270
  atanh /
@@ -374,7 +393,7 @@ still relevant.
374
393
  * better bignum parser
375
394
  * zero-copy method for strings generation
376
395
  * put rb_raise into nice macros
377
- * benchmarks against Python GMP (gmpy? Is this still active?) and Perl GMP
396
+ * benchmarks against Python GMP and Perl GMP
378
397
  * dup methods
379
398
  * integrate F into system
380
399
  * should Z.[] bits be 0/1 or true/false, 0 is true, what might badly surprise users
data/ext/gmp.c CHANGED
@@ -7,6 +7,9 @@
7
7
  #include <ruby_gmp.h>
8
8
 
9
9
  VALUE mGMP, cGMP_Z, cGMP_Q, cGMP_F, cGMP_RandState;
10
+ #ifdef MPFR
11
+ VALUE cGMP_Rnd;
12
+ #endif
10
13
 
11
14
  void r_gmpz_free(void *ptr) { mpz_clear (ptr); free (ptr); }
12
15
  void r_gmpq_free(void *ptr) { mpq_clear (ptr); free (ptr); }
@@ -55,37 +58,6 @@ static VALUE r_gmpq_initialize(int argc, VALUE *argv, VALUE self)
55
58
  return Qnil;
56
59
  }
57
60
 
58
- /* don't pass GMP::F here, it should be handled separately */
59
- void mpf_set_value(MP_FLOAT *self_val, VALUE arg)
60
- {
61
- MP_RAT *arg_val_q;
62
- MP_INT *arg_val_z;
63
-
64
- if (GMPQ_P(arg)) {
65
- mpq_get_struct(arg, arg_val_q);
66
- mpf_set_q(self_val, arg_val_q);
67
- } else if (GMPZ_P(arg)) {
68
- mpz_get_struct(arg, arg_val_z);
69
- mpf_set_z(self_val, arg_val_z);
70
- } else if (FLOAT_P(arg)) {
71
- mpf_set_d(self_val, NUM2DBL(arg));
72
- } else if (FIXNUM_P(arg)) {
73
- mpf_set_si(self_val, FIX2INT(arg));
74
- } else if (STRING_P(arg)) {
75
- if (mpf_set_str(self_val, STR2CSTR(arg), 10) == -1) {
76
- rb_raise(rb_eRuntimeError, "Badly formatted string");
77
- }
78
- } else if (BIGNUM_P(arg)) {
79
- #if 1 /* GMP3 code */
80
- mpz_temp_from_bignum(arg_val_z, arg);
81
- mpf_set_z(self_val, arg_val_z);
82
- mpz_temp_free(arg_val_z);
83
- #endif
84
- } else {
85
- rb_raise(rb_eTypeError, "Don't know how to convert %s into GMP::F", rb_class2name(rb_class_of(arg)));
86
- }
87
- }
88
-
89
61
  static VALUE r_gmpz_coerce(VALUE self, VALUE arg)
90
62
  {
91
63
  return rb_assoc_new(r_gmpzsg_new(1, &arg, cGMP_Z), self);
@@ -126,28 +98,29 @@ static VALUE r_gmpfsg_get_default_rounding_mode(VALUE klass)
126
98
  {
127
99
  (void)klass;
128
100
  const char *rounding_string_val;
129
- VALUE rounding_string;
130
- ID method_to_sym = rb_intern("to_sym");
131
101
  rounding_string_val = mpfr_print_rnd_mode (mpfr_get_default_rounding_mode ());
132
- rounding_string = rb_str_new2 (rounding_string_val);
133
- /*return rb_const_get (mGMP, rb_intern (rounding_string));*/
134
- return rb_funcall (rounding_string, method_to_sym, 0);
102
+ if ( rounding_string_val == NULL ) {
103
+ return Qnil;
104
+ }
105
+ else {
106
+ return rb_const_get (mGMP, rb_intern (rounding_string_val));
107
+ }
135
108
  }
136
109
 
137
110
  static VALUE r_gmpfsg_set_default_rounding_mode(VALUE klass, VALUE arg)
138
111
  {
139
112
  (void)klass;
140
- int arg_val;
141
- if (FIXNUM_P(arg)) {
142
- arg_val = FIX2INT(arg);
143
- if (arg_val < 0 || arg_val > 3) {
113
+ VALUE mode;
114
+ if (GMPRND_P(arg)) {
115
+ mode = rb_funcall (arg, rb_intern("mode"), 0);
116
+ if (FIX2INT(mode) < 0 || FIX2INT(mode) > 3) {
144
117
  rb_raise(rb_eRangeError, "rounding mode must be one of the rounding mode constants.");
145
118
  }
146
119
  } else {
147
120
  rb_raise(rb_eTypeError, "rounding mode must be one of the rounding mode constants.");
148
121
  }
149
122
 
150
- switch (arg_val) {
123
+ switch (FIX2INT(mode)) {
151
124
  case 0:
152
125
  mpfr_set_default_rounding_mode (GMP_RNDN);
153
126
  break;
@@ -163,7 +136,35 @@ static VALUE r_gmpfsg_set_default_rounding_mode(VALUE klass, VALUE arg)
163
136
  }
164
137
 
165
138
  return Qnil;
166
- }
139
+ }
140
+
141
+ mp_rnd_t r_get_rounding_mode(VALUE rnd)
142
+ {
143
+ VALUE mode;
144
+
145
+ if (GMPRND_P(rnd)) {
146
+ mode = rb_funcall (rnd, rb_intern("mode"), 0);
147
+ if (FIX2INT(mode) < 0 || FIX2INT(mode) > 3) {
148
+ rb_raise(rb_eRangeError, "rounding mode must be one of the rounding mode constants.");
149
+ }
150
+ } else {
151
+ rb_raise(rb_eTypeError, "rounding mode must be one of the rounding mode constants.");
152
+ }
153
+
154
+ switch (FIX2INT(mode)) {
155
+ case 0:
156
+ return GMP_RNDN;
157
+ case 1:
158
+ return GMP_RNDZ;
159
+ case 2:
160
+ return GMP_RNDU;
161
+ case 3:
162
+ return GMP_RNDD;
163
+ default:
164
+ return GMP_RNDN;
165
+ }
166
+ }
167
+
167
168
  #endif /* MPFR */
168
169
 
169
170
  #include "gmpf.h"
@@ -187,39 +188,41 @@ void Init_gmp() {
187
188
  rb_define_const(mGMP, "MPFR_VERSION", rb_str_new2(MPFR_VERSION_STRING));
188
189
  rb_define_const(mGMP, "MPFR_PREC_MIN", INT2FIX(MPFR_PREC_MIN));
189
190
  rb_define_const(mGMP, "MPFR_PREC_MAX", INT2FIX(MPFR_PREC_MAX));
190
- rb_define_const(mGMP, "GMP_RNDN", INT2FIX(0));
191
- rb_define_const(mGMP, "GMP_RNDZ", INT2FIX(1));
192
- rb_define_const(mGMP, "GMP_RNDU", INT2FIX(2));
193
- rb_define_const(mGMP, "GMP_RNDD", INT2FIX(3));
191
+ // rb_define_const(mGMP, "GMP_RNDN", INT2FIX(0));
192
+ // rb_define_const(mGMP, "GMP_RNDZ", INT2FIX(1));
193
+ // rb_define_const(mGMP, "GMP_RNDU", INT2FIX(2));
194
+ // rb_define_const(mGMP, "GMP_RNDD", INT2FIX(3));
194
195
  #endif /* MPFR */
195
196
 
196
197
  cGMP_Z = rb_define_class_under(mGMP, "Z", rb_cInteger);
197
- init_gmpz();
198
+ init_gmpz ();
198
199
  rb_define_method(cGMP_Z, "coerce", r_gmpz_coerce, 1);
199
200
 
200
201
  cGMP_Q = rb_define_class_under (mGMP, "Q", rb_cNumeric);
201
- init_gmpq();
202
+ init_gmpq ();
202
203
  rb_define_method(cGMP_Q, "initialize", r_gmpq_initialize, -1);
203
204
  rb_define_method(cGMP_Q, "coerce", r_gmpq_coerce, 1);
204
205
  rb_define_method(cGMP_Q, "num", r_gmpq_num, 0);
205
206
  rb_define_method(cGMP_Q, "den", r_gmpq_den, 0);
206
207
 
207
208
  cGMP_F = rb_define_class_under (mGMP, "F", rb_cNumeric);
208
- init_gmpf();
209
+ init_gmpf ();
209
210
  rb_define_singleton_method (cGMP_F, "default_prec", r_gmpfsg_get_default_prec, 0);
210
211
  rb_define_singleton_method (cGMP_F, "default_prec=", r_gmpfsg_set_default_prec, 1);
211
212
  #ifdef MPFR
213
+ cGMP_Rnd = rb_define_class_under (mGMP, "Rnd", rb_cObject);
212
214
  rb_define_singleton_method (cGMP_F, "default_rounding_mode", r_gmpfsg_get_default_rounding_mode, 0);
213
215
  rb_define_singleton_method (cGMP_F, "default_rounding_mode=", r_gmpfsg_set_default_rounding_mode, 1);
216
+ init_gmprnd ();
214
217
  #endif /* MPFR */
215
- rb_define_method(cGMP_F, "coerce", r_gmpf_coerce, 1); // new method - testing
218
+ rb_define_method (cGMP_F, "coerce", r_gmpf_coerce, 1); // new method - testing
216
219
 
217
220
  /* rb_define_method(cGMP_F, "cmpabs", r_gmpf_cmpabs, 1);*/
218
221
 
219
222
  cGMP_RandState = rb_define_class_under (mGMP, "RandState", rb_cObject);
220
- init_gmprandstate();
223
+ init_gmprandstate ();
221
224
 
222
- init_gmpbench_timing();
225
+ init_gmpbench_timing ();
223
226
 
224
227
  // more
225
228
 
data/ext/gmp.so CHANGED
Binary file
data/ext/gmpf.c CHANGED
@@ -70,7 +70,6 @@ VALUE r_gmpfsg_new(int argc, VALUE *argv, VALUE klass)
70
70
  {
71
71
  MP_FLOAT *res_val;
72
72
  VALUE res;
73
-
74
73
  (void)klass;
75
74
 
76
75
  if (argc > 2)
@@ -126,6 +125,37 @@ VALUE r_gmpf_initialize(int argc, VALUE *argv, VALUE self)
126
125
  return Qnil;
127
126
  }
128
127
 
128
+ /* don't pass GMP::F here, it should be handled separately */
129
+ void mpf_set_value(MP_FLOAT *self_val, VALUE arg)
130
+ {
131
+ MP_RAT *arg_val_q;
132
+ MP_INT *arg_val_z;
133
+
134
+ if (GMPQ_P(arg)) {
135
+ mpq_get_struct(arg, arg_val_q);
136
+ mpf_set_q(self_val, arg_val_q);
137
+ } else if (GMPZ_P(arg)) {
138
+ mpz_get_struct(arg, arg_val_z);
139
+ mpf_set_z(self_val, arg_val_z);
140
+ } else if (FLOAT_P(arg)) {
141
+ mpf_set_d(self_val, NUM2DBL(arg));
142
+ } else if (FIXNUM_P(arg)) {
143
+ mpf_set_si(self_val, FIX2INT(arg));
144
+ } else if (STRING_P(arg)) {
145
+ if (mpf_set_str(self_val, STR2CSTR(arg), 10) == -1) {
146
+ rb_raise(rb_eRuntimeError, "Badly formatted string");
147
+ }
148
+ } else if (BIGNUM_P(arg)) {
149
+ #if 1 /* GMP3 code */
150
+ mpz_temp_from_bignum(arg_val_z, arg);
151
+ mpf_set_z(self_val, arg_val_z);
152
+ mpz_temp_free(arg_val_z);
153
+ #endif
154
+ } else {
155
+ rb_raise(rb_eTypeError, "Don't know how to convert %s into GMP::F", rb_class2name(rb_class_of(arg)));
156
+ }
157
+ }
158
+
129
159
  /*
130
160
  * call-seq:
131
161
  * GMP::F(arg)
@@ -518,19 +548,48 @@ DEFUN_FLOAT_CMP(ge,>=)
518
548
  #ifdef MPFR
519
549
 
520
550
  #define MPFR_SINGLE_FUNCTION(name) \
521
- VALUE r_gmpfr_##name(VALUE self) \
551
+ VALUE r_gmpfr_##name(int argc, VALUE *argv, VALUE self) \
522
552
  { \
523
553
  MP_FLOAT *self_val, *res_val; \
524
- unsigned long prec; \
554
+ VALUE rnd_mode, res_prec; \
555
+ unsigned long prec, res_prec_value; \
556
+ mp_rnd_t rnd_mode_value; \
525
557
  VALUE res; \
526
558
  \
559
+ rb_scan_args (argc, argv, "02", &rnd_mode, &res_prec); \
560
+ \
527
561
  mpf_get_struct_prec (self, self_val, prec); \
528
- mpf_make_struct_init (res, res_val, prec); \
562
+ if (NIL_P (rnd_mode)) { rnd_mode_value = __gmp_default_rounding_mode; } \
563
+ else { rnd_mode_value = r_get_rounding_mode(rnd_mode); } \
564
+ if (NIL_P (res_prec)) { res_prec_value = prec; } \
565
+ else { res_prec_value = FIX2INT (res_prec); } \
566
+ mpf_make_struct_init (res, res_val, res_prec_value); \
529
567
  mpfr_##name (res_val, self_val, __gmp_default_rounding_mode); \
530
568
  \
531
569
  return res; \
532
570
  }
533
571
 
572
+ #define MPFR_SINGLE_1ARG_FUNCTION(name) \
573
+ VALUE r_gmpfr_##name(int argc, VALUE *argv, VALUE self) \
574
+ { \
575
+ MP_FLOAT *self_val, *res_val; \
576
+ VALUE arg1, res_prec; \
577
+ unsigned long prec, arg1_val, res_prec_value; \
578
+ VALUE res; \
579
+ \
580
+ rb_scan_args (argc, argv, "11", &arg1, &res_prec); \
581
+ \
582
+ mpf_get_struct_prec (self, self_val, prec); \
583
+ if (!FIXNUM_P (arg1)) { typeerror(ZXB); } \
584
+ arg1_val = FIX2LONG (arg1); \
585
+ if (NIL_P (res_prec)) { res_prec_value = prec; } \
586
+ else { res_prec_value = FIX2INT (res_prec); } \
587
+ mpf_make_struct_init (res, res_val, res_prec_value); \
588
+ mpfr_##name (res_val, arg1_val, self_val, __gmp_default_rounding_mode); \
589
+ \
590
+ return res; \
591
+ }
592
+
534
593
  #define MPFR_CONST_FUNCTION(name) \
535
594
  VALUE r_gmpfrsg_##name() \
536
595
  { \
@@ -550,7 +609,8 @@ MPFR_SINGLE_FUNCTION(log)
550
609
  MPFR_SINGLE_FUNCTION(log2)
551
610
  MPFR_SINGLE_FUNCTION(log10)
552
611
  MPFR_SINGLE_FUNCTION(exp)
553
-
612
+ MPFR_SINGLE_FUNCTION(exp2)
613
+ MPFR_SINGLE_FUNCTION(exp10)
554
614
  MPFR_SINGLE_FUNCTION(cos)
555
615
  MPFR_SINGLE_FUNCTION(sin)
556
616
  MPFR_SINGLE_FUNCTION(tan)
@@ -566,12 +626,29 @@ MPFR_SINGLE_FUNCTION(cosh)
566
626
  MPFR_SINGLE_FUNCTION(sinh)
567
627
  MPFR_SINGLE_FUNCTION(tanh)
568
628
 
629
+ MPFR_SINGLE_FUNCTION(sech)
630
+ MPFR_SINGLE_FUNCTION(csch)
631
+ MPFR_SINGLE_FUNCTION(coth)
569
632
  MPFR_SINGLE_FUNCTION(acosh)
570
633
  MPFR_SINGLE_FUNCTION(asinh)
571
634
  MPFR_SINGLE_FUNCTION(atanh)
572
635
 
573
636
  MPFR_SINGLE_FUNCTION(log1p)
574
637
  MPFR_SINGLE_FUNCTION(expm1)
638
+ MPFR_SINGLE_FUNCTION(eint)
639
+ MPFR_SINGLE_FUNCTION(li2)
640
+ MPFR_SINGLE_FUNCTION(gamma)
641
+ MPFR_SINGLE_FUNCTION(lngamma)
642
+ /*MPFR_SINGLE_FUNCTION(lgamma)*/
643
+ MPFR_SINGLE_FUNCTION(zeta)
644
+ MPFR_SINGLE_FUNCTION(erf)
645
+ MPFR_SINGLE_FUNCTION(erfc)
646
+ MPFR_SINGLE_FUNCTION(j0)
647
+ MPFR_SINGLE_FUNCTION(j1)
648
+ MPFR_SINGLE_1ARG_FUNCTION(jn)
649
+ MPFR_SINGLE_FUNCTION(y0)
650
+ MPFR_SINGLE_FUNCTION(y1)
651
+ MPFR_SINGLE_1ARG_FUNCTION(yn)
575
652
 
576
653
  MPFR_CONST_FUNCTION(const_log2)
577
654
  MPFR_CONST_FUNCTION(const_pi)
@@ -743,7 +820,7 @@ void init_gmpf()
743
820
 
744
821
  #ifdef MPFR
745
822
  // Basic Arithmetic Functions
746
- rb_define_method(cGMP_F, "sqrt", r_gmpfr_sqrt, 0);
823
+ rb_define_method(cGMP_F, "sqrt", r_gmpfr_sqrt, -1);
747
824
 
748
825
  rb_define_method(cGMP_F, "**", r_gmpfr_pow, 1);
749
826
 
@@ -754,32 +831,50 @@ void init_gmpf()
754
831
  rb_define_method(cGMP_F, "number?", r_gmpfr_number_p, 0);
755
832
 
756
833
  // Special Functions
757
- rb_define_method(cGMP_F, "log", r_gmpfr_log, 0);
758
- rb_define_method(cGMP_F, "log2", r_gmpfr_log2, 0);
759
- rb_define_method(cGMP_F, "log10", r_gmpfr_log10, 0);
760
- rb_define_method(cGMP_F, "exp", r_gmpfr_exp, 0);
761
-
762
- rb_define_method(cGMP_F, "cos", r_gmpfr_cos, 0);
763
- rb_define_method(cGMP_F, "sin", r_gmpfr_sin, 0);
764
- rb_define_method(cGMP_F, "tan", r_gmpfr_tan, 0);
765
- rb_define_method(cGMP_F, "sec", r_gmpfr_sec, 0);
766
- rb_define_method(cGMP_F, "csc", r_gmpfr_csc, 0);
767
- rb_define_method(cGMP_F, "cot", r_gmpfr_cot, 0);
834
+ rb_define_method(cGMP_F, "log", r_gmpfr_log, -1);
835
+ rb_define_method(cGMP_F, "log2", r_gmpfr_log2, -1);
836
+ rb_define_method(cGMP_F, "log10", r_gmpfr_log10, -1);
837
+ rb_define_method(cGMP_F, "exp", r_gmpfr_exp, -1);
838
+ rb_define_method(cGMP_F, "exp2", r_gmpfr_exp2, -1);
839
+ rb_define_method(cGMP_F, "exp10", r_gmpfr_exp10, -1);
840
+ rb_define_method(cGMP_F, "cos", r_gmpfr_cos, -1);
841
+ rb_define_method(cGMP_F, "sin", r_gmpfr_sin, -1);
842
+ rb_define_method(cGMP_F, "tan", r_gmpfr_tan, -1);
843
+ rb_define_method(cGMP_F, "sec", r_gmpfr_sec, -1);
844
+ rb_define_method(cGMP_F, "csc", r_gmpfr_csc, -1);
845
+ rb_define_method(cGMP_F, "cot", r_gmpfr_cot, -1);
768
846
 
769
- rb_define_method(cGMP_F, "acos", r_gmpfr_acos, 0);
770
- rb_define_method(cGMP_F, "asin", r_gmpfr_asin, 0);
771
- rb_define_method(cGMP_F, "atan", r_gmpfr_atan, 0);
847
+ rb_define_method(cGMP_F, "acos", r_gmpfr_acos, -1);
848
+ rb_define_method(cGMP_F, "asin", r_gmpfr_asin, -1);
849
+ rb_define_method(cGMP_F, "atan", r_gmpfr_atan, -1);
772
850
 
773
- rb_define_method(cGMP_F, "cosh", r_gmpfr_cosh, 0);
774
- rb_define_method(cGMP_F, "sinh", r_gmpfr_sinh, 0);
775
- rb_define_method(cGMP_F, "tanh", r_gmpfr_tanh, 0);
851
+ rb_define_method(cGMP_F, "cosh", r_gmpfr_cosh, -1);
852
+ rb_define_method(cGMP_F, "sinh", r_gmpfr_sinh, -1);
853
+ rb_define_method(cGMP_F, "tanh", r_gmpfr_tanh, -1);
776
854
 
777
- rb_define_method(cGMP_F, "acosh", r_gmpfr_acosh, 0);
778
- rb_define_method(cGMP_F, "asinh", r_gmpfr_asinh, 0);
779
- rb_define_method(cGMP_F, "atanh", r_gmpfr_atanh, 0);
855
+ rb_define_method(cGMP_F, "sech", r_gmpfr_sech, -1);
856
+ rb_define_method(cGMP_F, "csch", r_gmpfr_csch, -1);
857
+ rb_define_method(cGMP_F, "coth", r_gmpfr_coth, -1);
858
+ rb_define_method(cGMP_F, "acosh", r_gmpfr_acosh, -1);
859
+ rb_define_method(cGMP_F, "asinh", r_gmpfr_asinh, -1);
860
+ rb_define_method(cGMP_F, "atanh", r_gmpfr_atanh, -1);
780
861
 
781
- rb_define_method(cGMP_F, "log1p", r_gmpfr_log1p, 0);
782
- rb_define_method(cGMP_F, "expm1", r_gmpfr_expm1, 0);
862
+ rb_define_method(cGMP_F, "log1p", r_gmpfr_log1p, -1);
863
+ rb_define_method(cGMP_F, "expm1", r_gmpfr_expm1, -1);
864
+ rb_define_method(cGMP_F, "eint", r_gmpfr_eint, -1);
865
+ rb_define_method(cGMP_F, "li2", r_gmpfr_li2, -1);
866
+ rb_define_method(cGMP_F, "gamma", r_gmpfr_gamma, -1);
867
+ rb_define_method(cGMP_F, "lngamma", r_gmpfr_lngamma, -1);
868
+ /*rb_define_method(cGMP_F, "lgamma", r_gmpfr_lgamma, -1);*/
869
+ rb_define_method(cGMP_F, "zeta", r_gmpfr_zeta, -1);
870
+ rb_define_method(cGMP_F, "erf", r_gmpfr_erf, -1);
871
+ rb_define_method(cGMP_F, "erfc", r_gmpfr_erfc, -1);
872
+ rb_define_method(cGMP_F, "j0", r_gmpfr_j0, -1);
873
+ rb_define_method(cGMP_F, "j1", r_gmpfr_j1, -1);
874
+ rb_define_method(cGMP_F, "jn", r_gmpfr_jn, -1);
875
+ rb_define_method(cGMP_F, "y0", r_gmpfr_y0, -1);
876
+ rb_define_method(cGMP_F, "y1", r_gmpfr_y1, -1);
877
+ rb_define_method(cGMP_F, "yn", r_gmpfr_yn, -1);
783
878
 
784
879
  rb_define_singleton_method(cGMP_F, "const_log2", r_gmpfrsg_const_log2, 0);
785
880
  rb_define_singleton_method(cGMP_F, "const_pi", r_gmpfrsg_const_pi, 0);