ruby-mpfi 0.0.9 → 0.0.10
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/ext/mpfi/func_mpfi_extention.c +5 -7
- data/ext/mpfi/func_mpfi_extention.h +2 -2
- data/ext/mpfi/ruby_mpfi.c +181 -165
- data/ext/mpfi/ruby_mpfi.h +9 -9
- data/ext/mpfi_complex/mpfi/func_mpfi_extention.h +2 -2
- data/ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.c +16 -16
- data/ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.h +16 -16
- data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.c +19 -21
- data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.h +1 -1
- data/ext/mpfi_matrix/mpfi/func_mpfi_extention.h +2 -2
- data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.c +113 -113
- data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.h +46 -47
- data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c +198 -195
- data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.h +2 -2
- data/lib/mpfi.rb +21 -0
- data/lib/mpfi/matrix.rb +109 -23
- data/lib/mpfi/version.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e01c430299b5a87c4b8f6d60666a628de85bd95d
|
4
|
+
data.tar.gz: 4cf943132b7fe3a93256396753ea8bbd88dbd93f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36831fc758bc3d68e65719b44958b615dfb64a4eb157299af23976629a5fb13c93e92f5bf052169f7375eed9491627e2af2f45284af75029cd988a409cf2f77d
|
7
|
+
data.tar.gz: 09897dfa3ec6e2eadece450a3978595e32c772eee2471f9ae4fc7d77ebc13dfb0adffd6d9170b9a181582763e68e6a6a2caebbb144b8ca05121a7aeb29e266b1
|
@@ -4,7 +4,7 @@
|
|
4
4
|
#include "ruby_mpfi.h"
|
5
5
|
#include "func_mpfi_extention.h"
|
6
6
|
|
7
|
-
void mpfi_mid_interval(mpfi_t ret, mpfi_t x){
|
7
|
+
void mpfi_mid_interval (mpfi_t ret, mpfi_t x) {
|
8
8
|
mpfr_t left, right;
|
9
9
|
mpfr_init2(left, mpfi_get_prec(x));
|
10
10
|
mpfr_init2(right, mpfi_get_prec(x));
|
@@ -21,21 +21,20 @@ void mpfi_mid_interval(mpfi_t ret, mpfi_t x){
|
|
21
21
|
|
22
22
|
/* Retrun 0 if this function puts subdivision to *ret. */
|
23
23
|
/* Otherwise, return -1. */
|
24
|
-
int mpfi_subdivision(int num, mpfi_t *ret, mpfi_t x){
|
24
|
+
int mpfi_subdivision (int num, mpfi_t *ret, mpfi_t x) {
|
25
25
|
int i, ret_val = -1;
|
26
|
-
mpfr_t l;
|
26
|
+
mpfr_t l, x_diam;
|
27
27
|
mpfr_init(l);
|
28
28
|
mpfr_sub(l, r_mpfi_right_ptr(x), r_mpfi_left_ptr(x), GMP_RNDD);
|
29
29
|
mpfr_div_si(l, l, num, GMP_RNDD);
|
30
30
|
|
31
|
-
mpfr_t x_diam;
|
32
31
|
mpfr_init(x_diam);
|
33
32
|
mpfi_diam_abs(x_diam, x);
|
34
|
-
if(mpfr_cmp(x_diam, l) > 0){
|
33
|
+
if (mpfr_cmp(x_diam, l) > 0) {
|
35
34
|
mpfr_set(r_mpfi_left_ptr(*ret), r_mpfi_left_ptr(x), GMP_RNDN);
|
36
35
|
mpfr_add(r_mpfi_right_ptr(*ret), r_mpfi_left_ptr(*ret), l, GMP_RNDU);
|
37
36
|
|
38
|
-
for(i = 1; i < num - 1; i ++){
|
37
|
+
for (i = 1; i < num - 1; i ++) {
|
39
38
|
mpfr_set(r_mpfi_left_ptr(*ret + i), r_mpfi_right_ptr(*ret + i - 1), GMP_RNDN);
|
40
39
|
mpfr_add(r_mpfi_right_ptr(*ret + i), r_mpfi_left_ptr(*ret + i), l, GMP_RNDU);
|
41
40
|
}
|
@@ -49,4 +48,3 @@ int mpfi_subdivision(int num, mpfi_t *ret, mpfi_t x){
|
|
49
48
|
mpfr_clear(l);
|
50
49
|
return ret_val;
|
51
50
|
}
|
52
|
-
|
@@ -1,2 +1,2 @@
|
|
1
|
-
void mpfi_mid_interval(mpfi_t ret, mpfi_t x);
|
2
|
-
int mpfi_subdivision(int num, mpfi_t *ret, mpfi_t x);
|
1
|
+
void mpfi_mid_interval (mpfi_t ret, mpfi_t x);
|
2
|
+
int mpfi_subdivision (int num, mpfi_t *ret, mpfi_t x);
|
data/ext/mpfi/ruby_mpfi.c
CHANGED
@@ -9,13 +9,13 @@ static VALUE __mpfi_class__, __mpfr_class__, __sym_to_s__, __sym_to_str__;
|
|
9
9
|
/* ------------------------------ function state start ------------------------------ */
|
10
10
|
|
11
11
|
/* Save the value of last function state. */
|
12
|
-
void r_mpfi_set_function_state(int num)
|
12
|
+
void r_mpfi_set_function_state (int num)
|
13
13
|
{
|
14
14
|
rb_cv_set(r_mpfi_class, CLASS_VAL_FUNCTION_STATE, INT2NUM(num));
|
15
15
|
}
|
16
16
|
|
17
17
|
/* Return state of last function of MPFI. */
|
18
|
-
VALUE r_mpfi_get_function_state(VALUE self)
|
18
|
+
VALUE r_mpfi_get_function_state (VALUE self)
|
19
19
|
{
|
20
20
|
return rb_cv_get(r_mpfi_class, CLASS_VAL_FUNCTION_STATE);
|
21
21
|
}
|
@@ -24,13 +24,13 @@ VALUE r_mpfi_get_function_state(VALUE self)
|
|
24
24
|
|
25
25
|
/* ------------------------------ allocation start ------------------------------ */
|
26
26
|
|
27
|
-
void r_mpfi_free(void *ptr)
|
27
|
+
void r_mpfi_free (void *ptr)
|
28
28
|
{
|
29
29
|
mpfi_clear(ptr);
|
30
30
|
free(ptr);
|
31
31
|
}
|
32
32
|
|
33
|
-
VALUE r_mpfi_make_new_fi_obj(MPFI *ptr)
|
33
|
+
VALUE r_mpfi_make_new_fi_obj (MPFI *ptr)
|
34
34
|
{
|
35
35
|
VALUE ret;
|
36
36
|
MPFI *ptr_ret;
|
@@ -41,16 +41,16 @@ VALUE r_mpfi_make_new_fi_obj(MPFI *ptr)
|
|
41
41
|
|
42
42
|
static void r_mpfi_set_interv_from_robjs (MPFI *ptr, VALUE a1, VALUE a2)
|
43
43
|
{
|
44
|
-
if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, a1)) && RTEST(rb_funcall(__mpfr_class__, eqq, 1, a2))){
|
44
|
+
if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, a1)) && RTEST(rb_funcall(__mpfr_class__, eqq, 1, a2))) {
|
45
45
|
MPFR *ptr_a1, *ptr_a2;
|
46
46
|
r_mpfr_get_struct(ptr_a1, a1);
|
47
47
|
r_mpfr_get_struct(ptr_a2, a2);
|
48
48
|
r_mpfi_set_function_state(mpfi_interv_fr(ptr, ptr_a1, ptr_a2));
|
49
|
-
}else if((TYPE(a1) == T_FIXNUM) && (TYPE(a2) == T_FIXNUM)){
|
49
|
+
} else if ((TYPE(a1) == T_FIXNUM) && (TYPE(a2) == T_FIXNUM)) {
|
50
50
|
r_mpfi_set_function_state(mpfi_interv_si(ptr, FIX2LONG(a1), FIX2LONG(a2)));
|
51
|
-
}else if((TYPE(a1) == T_FLOAT) && (TYPE(a2) == T_FLOAT)){
|
51
|
+
} else if ((TYPE(a1) == T_FLOAT) && (TYPE(a2) == T_FLOAT)) {
|
52
52
|
r_mpfi_set_function_state(mpfi_interv_d(ptr, NUM2DBL(a1), NUM2DBL(a2)));
|
53
|
-
}else{
|
53
|
+
} else {
|
54
54
|
MPFR *ptr_a1, *ptr_a2;
|
55
55
|
volatile VALUE tmp_a1 = r_mpfr_new_fr_obj(a1);
|
56
56
|
volatile VALUE tmp_a2 = r_mpfr_new_fr_obj(a2);
|
@@ -76,29 +76,29 @@ static void r_mpfi_set_from_string (MPFI *ptr, VALUE obj)
|
|
76
76
|
char *str;
|
77
77
|
if (RTEST(rb_funcall(rb_funcall(obj, class, 0), method_defined, 1, __sym_to_str__))) {
|
78
78
|
str = StringValuePtr(obj);
|
79
|
-
} else if (RTEST(rb_funcall(rb_funcall(obj, class, 0), method_defined, 1, __sym_to_s__))){
|
79
|
+
} else if (RTEST(rb_funcall(rb_funcall(obj, class, 0), method_defined, 1, __sym_to_s__))) {
|
80
80
|
VALUE tmp = rb_funcall(obj, to_s, 0);
|
81
81
|
str = StringValuePtr(tmp);
|
82
82
|
} else {
|
83
83
|
rb_raise(rb_eArgError, "Can not convert to strings.");
|
84
84
|
}
|
85
|
-
if(mpfi_set_str(ptr, str, 10) != 0) {
|
85
|
+
if (mpfi_set_str(ptr, str, 10) != 0) {
|
86
86
|
rb_raise(rb_eArgError, "Invalid string format of MPFI initialization: \"%s\"", str);
|
87
87
|
}
|
88
88
|
}
|
89
89
|
|
90
|
-
void r_mpfi_set_robj(MPFI *ptr, VALUE obj)
|
90
|
+
void r_mpfi_set_robj (MPFI *ptr, VALUE obj)
|
91
91
|
{
|
92
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, obj))){
|
92
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, obj))) {
|
93
93
|
MPFI *ptr_obj;
|
94
94
|
r_mpfi_get_struct(ptr_obj, obj);
|
95
95
|
mpfi_set(ptr, ptr_obj);
|
96
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, obj))){
|
96
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, obj))) {
|
97
97
|
MPFR *ptr_obj;
|
98
98
|
r_mpfr_get_struct(ptr_obj, obj);
|
99
99
|
mpfi_set_fr(ptr, ptr_obj);
|
100
|
-
}else{
|
101
|
-
switch(TYPE(obj)){
|
100
|
+
} else {
|
101
|
+
switch (TYPE(obj)) {
|
102
102
|
case T_FLOAT:
|
103
103
|
mpfi_set_d(ptr, NUM2DBL(obj));
|
104
104
|
break;
|
@@ -115,11 +115,11 @@ void r_mpfi_set_robj(MPFI *ptr, VALUE obj)
|
|
115
115
|
}
|
116
116
|
}
|
117
117
|
|
118
|
-
VALUE r_mpfi_new_fi_obj(VALUE obj)
|
118
|
+
VALUE r_mpfi_new_fi_obj (VALUE obj)
|
119
119
|
{
|
120
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, obj))){
|
120
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, obj))) {
|
121
121
|
return obj;
|
122
|
-
}else{
|
122
|
+
} else {
|
123
123
|
return rb_funcall(__mpfi_class__, new, 1, obj);
|
124
124
|
}
|
125
125
|
}
|
@@ -127,16 +127,16 @@ VALUE r_mpfi_new_fi_obj(VALUE obj)
|
|
127
127
|
/* Initializing and Assigning Intervals */
|
128
128
|
|
129
129
|
/* Allocation function. */
|
130
|
-
static VALUE r_mpfi_alloc(VALUE self)
|
130
|
+
static VALUE r_mpfi_alloc (VALUE self)
|
131
131
|
{
|
132
132
|
MPFI *ptr;
|
133
133
|
r_mpfi_make_struct(self, ptr);
|
134
134
|
return self;
|
135
135
|
}
|
136
136
|
|
137
|
-
static void r_mpfi_set_initial_value(MPFI *ptr, int argc, VALUE *argv)
|
137
|
+
static void r_mpfi_set_initial_value (MPFI *ptr, int argc, VALUE *argv)
|
138
138
|
{
|
139
|
-
switch(argc){
|
139
|
+
switch (argc) {
|
140
140
|
case 0:
|
141
141
|
mpfi_init(ptr);
|
142
142
|
break;
|
@@ -155,7 +155,7 @@ static void r_mpfi_set_initial_value(MPFI *ptr, int argc, VALUE *argv)
|
|
155
155
|
}
|
156
156
|
|
157
157
|
/* Return new MPFI instance. The same arguments as MPFI.new is acceptable. */
|
158
|
-
static VALUE r_mpfi_global_new(int argc, VALUE *argv, VALUE self)
|
158
|
+
static VALUE r_mpfi_global_new (int argc, VALUE *argv, VALUE self)
|
159
159
|
{
|
160
160
|
MPFI *ptr;
|
161
161
|
VALUE val;
|
@@ -169,7 +169,7 @@ static VALUE r_mpfi_global_new(int argc, VALUE *argv, VALUE self)
|
|
169
169
|
which is MPFR, Float, Fixnum, String, and Array having two elements.
|
170
170
|
The string must be "number" or "[number1, number2]" (refer MPFI documents).
|
171
171
|
The second one is precision and its class is Fixnum. */
|
172
|
-
static VALUE r_mpfi_initialize(int argc, VALUE *argv, VALUE self)
|
172
|
+
static VALUE r_mpfi_initialize (int argc, VALUE *argv, VALUE self)
|
173
173
|
{
|
174
174
|
MPFI *ptr;
|
175
175
|
r_mpfi_get_struct(ptr, self);
|
@@ -178,7 +178,7 @@ static VALUE r_mpfi_initialize(int argc, VALUE *argv, VALUE self)
|
|
178
178
|
}
|
179
179
|
|
180
180
|
/* initialize_copy. */
|
181
|
-
static VALUE r_mpfi_initialize_copy(VALUE self, VALUE other)
|
181
|
+
static VALUE r_mpfi_initialize_copy (VALUE self, VALUE other)
|
182
182
|
{
|
183
183
|
MPFI *ptr_self, *ptr_other;
|
184
184
|
r_mpfi_get_struct(ptr_self, self);
|
@@ -189,7 +189,7 @@ static VALUE r_mpfi_initialize_copy(VALUE self, VALUE other)
|
|
189
189
|
}
|
190
190
|
|
191
191
|
/* Return array which have MPFI instance converted to from p1 and self. */
|
192
|
-
static VALUE r_mpfi_coerce(VALUE self, VALUE other)
|
192
|
+
static VALUE r_mpfi_coerce (VALUE self, VALUE other)
|
193
193
|
{
|
194
194
|
VALUE val_other;
|
195
195
|
MPFI *ptr_self, *ptr_other;
|
@@ -218,12 +218,12 @@ static VALUE r_mpfi_swap (VALUE self, VALUE other)
|
|
218
218
|
return self;
|
219
219
|
}
|
220
220
|
|
221
|
-
char *r_mpfi_dump_to_string(MPFI *ptr_s)
|
221
|
+
char *r_mpfi_dump_to_string (MPFI *ptr_s)
|
222
222
|
{
|
223
223
|
char *ret_str, *str_right, *str_left;
|
224
224
|
str_left = r_mpfr_dump_to_string(r_mpfi_left_ptr(ptr_s));
|
225
225
|
str_right = r_mpfr_dump_to_string(r_mpfi_right_ptr(ptr_s));
|
226
|
-
if(!mpfr_asprintf(&ret_str, "%s %s", str_left, str_right)) {
|
226
|
+
if (!mpfr_asprintf(&ret_str, "%s %s", str_left, str_right)) {
|
227
227
|
rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
|
228
228
|
}
|
229
229
|
mpfr_free_str(str_left);
|
@@ -231,7 +231,7 @@ char *r_mpfi_dump_to_string(MPFI *ptr_s)
|
|
231
231
|
return ret_str;
|
232
232
|
}
|
233
233
|
|
234
|
-
static VALUE r_mpfi_marshal_dump(VALUE self)
|
234
|
+
static VALUE r_mpfi_marshal_dump (VALUE self)
|
235
235
|
{
|
236
236
|
MPFI *ptr_s;
|
237
237
|
char *ret_str;
|
@@ -243,7 +243,7 @@ static VALUE r_mpfi_marshal_dump(VALUE self)
|
|
243
243
|
return ret_val;
|
244
244
|
}
|
245
245
|
|
246
|
-
void r_mpfi_load_string(MPFI *ptr_s, const char *dump)
|
246
|
+
void r_mpfi_load_string (MPFI *ptr_s, const char *dump)
|
247
247
|
{
|
248
248
|
int i;
|
249
249
|
char *left;
|
@@ -260,7 +260,7 @@ void r_mpfi_load_string(MPFI *ptr_s, const char *dump)
|
|
260
260
|
r_mpfr_load_string(r_mpfi_right_ptr(ptr_s), dump + i);
|
261
261
|
}
|
262
262
|
|
263
|
-
static VALUE r_mpfi_marshal_load(VALUE self, VALUE dump_string)
|
263
|
+
static VALUE r_mpfi_marshal_load (VALUE self, VALUE dump_string)
|
264
264
|
{
|
265
265
|
MPFI *ptr_s;
|
266
266
|
char *dump;
|
@@ -284,7 +284,7 @@ static VALUE r_mpfi_set_prec (VALUE self, VALUE prec)
|
|
284
284
|
{
|
285
285
|
MPFI *ptr_self;
|
286
286
|
r_mpfi_get_struct(ptr_self, self);
|
287
|
-
/* if(mpfi_set_prec(ptr_self, NUM2INT(prec)) != 0){ */
|
287
|
+
/* if (mpfi_set_prec(ptr_self, NUM2INT(prec)) != 0) { */
|
288
288
|
/* rb_raise(rb_eRuntimeError, "Memory allocation failed for mpfi_set_prec."); */
|
289
289
|
/* } */
|
290
290
|
mpfi_set_prec(ptr_self, NUM2INT(prec));
|
@@ -314,15 +314,15 @@ static VALUE r_mpfi_round_prec (VALUE self, VALUE prec)
|
|
314
314
|
/* ------------------------------ string start ------------------------------ */
|
315
315
|
|
316
316
|
/* String for inspect. */
|
317
|
-
static VALUE r_mpfi_inspect(VALUE self)
|
317
|
+
static VALUE r_mpfi_inspect (VALUE self)
|
318
318
|
{
|
319
319
|
MPFI *ptr_s;
|
320
320
|
char *ret_str;
|
321
321
|
VALUE ret_val;
|
322
322
|
r_mpfi_get_struct(ptr_s, self);
|
323
323
|
if (!mpfr_asprintf(&ret_str, "#<MPFI:%lx,['%.Re %.Re'],%d>",
|
324
|
-
|
325
|
-
|
324
|
+
NUM2LONG(rb_funcall(self, object_id, 0)), r_mpfi_left_ptr(ptr_s),
|
325
|
+
r_mpfi_right_ptr(ptr_s), mpfi_get_prec(ptr_s))) {
|
326
326
|
rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
|
327
327
|
}
|
328
328
|
ret_val = rb_str_new2(ret_str);
|
@@ -331,7 +331,7 @@ static VALUE r_mpfi_inspect(VALUE self)
|
|
331
331
|
}
|
332
332
|
|
333
333
|
/* Return array having two strings to which endpoints is converted. */
|
334
|
-
static VALUE r_mpfi_to_str_ary(VALUE self)
|
334
|
+
static VALUE r_mpfi_to_str_ary (VALUE self)
|
335
335
|
{
|
336
336
|
MPFI *ptr_self;
|
337
337
|
char *ret_str1, *ret_str2;
|
@@ -351,7 +351,7 @@ static VALUE r_mpfi_to_str_ary(VALUE self)
|
|
351
351
|
}
|
352
352
|
|
353
353
|
/* Return array having two strings to which endpoints are converted by mpfr_asprintf with format_str. */
|
354
|
-
static VALUE r_mpfi_to_strf_ary(VALUE self, VALUE format_str)
|
354
|
+
static VALUE r_mpfi_to_strf_ary (VALUE self, VALUE format_str)
|
355
355
|
{
|
356
356
|
MPFI *ptr_self;
|
357
357
|
char *format, *ret_str1, *ret_str2;
|
@@ -383,19 +383,19 @@ static VALUE r_mpfi_add (VALUE self, VALUE other)
|
|
383
383
|
r_mpfi_get_struct(ptr_self, self);
|
384
384
|
r_mpfi_make_struct_init(val_ret, ptr_ret);
|
385
385
|
|
386
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
386
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
387
387
|
MPFI *ptr_other;
|
388
388
|
r_mpfi_get_struct(ptr_other, other);
|
389
389
|
mpfi_add(ptr_ret, ptr_self, ptr_other);
|
390
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
390
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
391
391
|
MPFR *ptr_other;
|
392
392
|
r_mpfr_get_struct(ptr_other, other);
|
393
393
|
mpfi_add_fr(ptr_ret, ptr_self, ptr_other);
|
394
|
-
}else if(TYPE(other) == T_FIXNUM){
|
394
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
395
395
|
mpfi_add_si(ptr_ret, ptr_self, FIX2LONG(other));
|
396
|
-
}else if(TYPE(other) == T_FLOAT){
|
396
|
+
} else if (TYPE(other) == T_FLOAT) {
|
397
397
|
mpfi_add_d(ptr_ret, ptr_self, NUM2DBL(other));
|
398
|
-
}else{
|
398
|
+
} else {
|
399
399
|
MPFI *ptr_other;
|
400
400
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
401
401
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -412,19 +412,19 @@ static VALUE r_mpfi_sub (VALUE self, VALUE other)
|
|
412
412
|
r_mpfi_get_struct(ptr_self, self);
|
413
413
|
r_mpfi_make_struct_init(val_ret, ptr_ret);
|
414
414
|
|
415
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
415
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
416
416
|
MPFI *ptr_other;
|
417
417
|
r_mpfi_get_struct(ptr_other, other);
|
418
418
|
mpfi_sub(ptr_ret, ptr_self, ptr_other);
|
419
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
419
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
420
420
|
MPFR *ptr_other;
|
421
421
|
r_mpfr_get_struct(ptr_other, other);
|
422
422
|
mpfi_sub_fr(ptr_ret, ptr_self, ptr_other);
|
423
|
-
}else if(TYPE(other) == T_FIXNUM){
|
423
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
424
424
|
mpfi_sub_si(ptr_ret, ptr_self, FIX2LONG(other));
|
425
|
-
}else if(TYPE(other) == T_FLOAT){
|
425
|
+
} else if (TYPE(other) == T_FLOAT) {
|
426
426
|
mpfi_sub_d(ptr_ret, ptr_self, NUM2DBL(other));
|
427
|
-
}else{
|
427
|
+
} else {
|
428
428
|
MPFI *ptr_other;
|
429
429
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
430
430
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -441,19 +441,19 @@ static VALUE r_mpfi_mul (VALUE self, VALUE other)
|
|
441
441
|
r_mpfi_get_struct(ptr_self, self);
|
442
442
|
r_mpfi_make_struct_init(val_ret, ptr_ret);
|
443
443
|
|
444
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
444
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
445
445
|
MPFI *ptr_other;
|
446
446
|
r_mpfi_get_struct(ptr_other, other);
|
447
447
|
mpfi_mul(ptr_ret, ptr_self, ptr_other);
|
448
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
448
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
449
449
|
MPFR *ptr_other;
|
450
450
|
r_mpfr_get_struct(ptr_other, other);
|
451
451
|
mpfi_mul_fr(ptr_ret, ptr_self, ptr_other);
|
452
|
-
}else if(TYPE(other) == T_FIXNUM){
|
452
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
453
453
|
mpfi_mul_si(ptr_ret, ptr_self, FIX2LONG(other));
|
454
|
-
}else if(TYPE(other) == T_FLOAT){
|
454
|
+
} else if (TYPE(other) == T_FLOAT) {
|
455
455
|
mpfi_mul_d(ptr_ret, ptr_self, NUM2DBL(other));
|
456
|
-
}else{
|
456
|
+
} else {
|
457
457
|
MPFI *ptr_other;
|
458
458
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
459
459
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -470,19 +470,19 @@ static VALUE r_mpfi_div (VALUE self, VALUE other)
|
|
470
470
|
r_mpfi_get_struct(ptr_self, self);
|
471
471
|
r_mpfi_make_struct_init(val_ret, ptr_ret);
|
472
472
|
|
473
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
473
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
474
474
|
MPFI *ptr_other;
|
475
475
|
r_mpfi_get_struct(ptr_other, other);
|
476
476
|
mpfi_div(ptr_ret, ptr_self, ptr_other);
|
477
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
477
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
478
478
|
MPFR *ptr_other;
|
479
479
|
r_mpfr_get_struct(ptr_other, other);
|
480
480
|
mpfi_div_fr(ptr_ret, ptr_self, ptr_other);
|
481
|
-
}else if(TYPE(other) == T_FIXNUM){
|
481
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
482
482
|
mpfi_div_si(ptr_ret, ptr_self, FIX2LONG(other));
|
483
|
-
}else if(TYPE(other) == T_FLOAT){
|
483
|
+
} else if (TYPE(other) == T_FLOAT) {
|
484
484
|
mpfi_div_d(ptr_ret, ptr_self, NUM2DBL(other));
|
485
|
-
}else{
|
485
|
+
} else {
|
486
486
|
MPFI *ptr_other;
|
487
487
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
488
488
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -514,7 +514,7 @@ static VALUE r_mpfi_div_2si (int argc, VALUE *argv, VALUE self)
|
|
514
514
|
}
|
515
515
|
|
516
516
|
/* mpfi_neg(ret, self) */
|
517
|
-
static VALUE r_mpfi_neg(int argc, VALUE *argv, VALUE self)
|
517
|
+
static VALUE r_mpfi_neg (int argc, VALUE *argv, VALUE self)
|
518
518
|
{
|
519
519
|
MPFI *ptr_self, *ptr_ret;
|
520
520
|
VALUE val_ret;
|
@@ -525,7 +525,7 @@ static VALUE r_mpfi_neg(int argc, VALUE *argv, VALUE self)
|
|
525
525
|
}
|
526
526
|
|
527
527
|
/* mpfi_inv(ret, self) */
|
528
|
-
static VALUE r_mpfi_inv(int argc, VALUE *argv, VALUE self)
|
528
|
+
static VALUE r_mpfi_inv (int argc, VALUE *argv, VALUE self)
|
529
529
|
{
|
530
530
|
MPFI *ptr_self, *ptr_ret;
|
531
531
|
VALUE val_ret;
|
@@ -536,7 +536,7 @@ static VALUE r_mpfi_inv(int argc, VALUE *argv, VALUE self)
|
|
536
536
|
}
|
537
537
|
|
538
538
|
/* mpfi_abs(ret, self) */
|
539
|
-
static VALUE r_mpfi_abs(int argc, VALUE *argv, VALUE self)
|
539
|
+
static VALUE r_mpfi_abs (int argc, VALUE *argv, VALUE self)
|
540
540
|
{
|
541
541
|
MPFI *ptr_self, *ptr_ret;
|
542
542
|
VALUE val_ret;
|
@@ -557,19 +557,19 @@ static VALUE r_mpfi_cmp (VALUE self, VALUE other)
|
|
557
557
|
int ret;
|
558
558
|
r_mpfi_get_struct(ptr_self, self);
|
559
559
|
|
560
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
560
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
561
561
|
MPFI *ptr_other;
|
562
562
|
r_mpfi_get_struct(ptr_other, other);
|
563
563
|
ret = mpfi_cmp(ptr_self, ptr_other);
|
564
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
564
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
565
565
|
MPFR *ptr_other;
|
566
566
|
r_mpfr_get_struct(ptr_other, other);
|
567
567
|
ret = mpfi_cmp_fr(ptr_self, ptr_other);
|
568
|
-
}else if(TYPE(other) == T_FIXNUM){
|
568
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
569
569
|
ret = mpfi_cmp_si(ptr_self, FIX2LONG(other));
|
570
|
-
}else if(TYPE(other) == T_FLOAT){
|
570
|
+
} else if (TYPE(other) == T_FLOAT) {
|
571
571
|
ret = mpfi_cmp_d(ptr_self, NUM2DBL(other));
|
572
|
-
}else{
|
572
|
+
} else {
|
573
573
|
MPFI *ptr_other;
|
574
574
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
575
575
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -585,7 +585,7 @@ static VALUE r_mpfi_is_pos (VALUE self)
|
|
585
585
|
r_mpfi_get_struct(ptr_self, self);
|
586
586
|
if (mpfi_is_pos(ptr_self) > 0) {
|
587
587
|
return Qtrue;
|
588
|
-
}else{
|
588
|
+
} else {
|
589
589
|
return Qnil;
|
590
590
|
}
|
591
591
|
}
|
@@ -597,7 +597,7 @@ static VALUE r_mpfi_is_strictly_pos (VALUE self)
|
|
597
597
|
r_mpfi_get_struct(ptr_self, self);
|
598
598
|
if (mpfi_is_strictly_pos(ptr_self) > 0) {
|
599
599
|
return Qtrue;
|
600
|
-
}else{
|
600
|
+
} else {
|
601
601
|
return Qnil;
|
602
602
|
}
|
603
603
|
}
|
@@ -609,7 +609,7 @@ static VALUE r_mpfi_is_nonneg (VALUE self)
|
|
609
609
|
r_mpfi_get_struct(ptr_self, self);
|
610
610
|
if (mpfi_is_nonneg(ptr_self) > 0) {
|
611
611
|
return Qtrue;
|
612
|
-
}else{
|
612
|
+
} else {
|
613
613
|
return Qnil;
|
614
614
|
}
|
615
615
|
}
|
@@ -621,7 +621,7 @@ static VALUE r_mpfi_is_neg (VALUE self)
|
|
621
621
|
r_mpfi_get_struct(ptr_self, self);
|
622
622
|
if (mpfi_is_neg(ptr_self) > 0) {
|
623
623
|
return Qtrue;
|
624
|
-
}else{
|
624
|
+
} else {
|
625
625
|
return Qnil;
|
626
626
|
}
|
627
627
|
}
|
@@ -633,7 +633,7 @@ static VALUE r_mpfi_is_strictly_neg (VALUE self)
|
|
633
633
|
r_mpfi_get_struct(ptr_self, self);
|
634
634
|
if (mpfi_is_strictly_neg(ptr_self) > 0) {
|
635
635
|
return Qtrue;
|
636
|
-
}else{
|
636
|
+
} else {
|
637
637
|
return Qnil;
|
638
638
|
}
|
639
639
|
}
|
@@ -645,7 +645,7 @@ static VALUE r_mpfi_is_nonpos (VALUE self)
|
|
645
645
|
r_mpfi_get_struct(ptr_self, self);
|
646
646
|
if (mpfi_is_nonpos(ptr_self) > 0) {
|
647
647
|
return Qtrue;
|
648
|
-
}else{
|
648
|
+
} else {
|
649
649
|
return Qnil;
|
650
650
|
}
|
651
651
|
}
|
@@ -657,7 +657,7 @@ static VALUE r_mpfi_is_zero (VALUE self)
|
|
657
657
|
r_mpfi_get_struct(ptr_self, self);
|
658
658
|
if (mpfi_is_zero(ptr_self) > 0) {
|
659
659
|
return Qtrue;
|
660
|
-
}else{
|
660
|
+
} else {
|
661
661
|
return Qnil;
|
662
662
|
}
|
663
663
|
}
|
@@ -669,7 +669,7 @@ static VALUE r_mpfi_has_zero (VALUE self)
|
|
669
669
|
r_mpfi_get_struct(ptr_self, self);
|
670
670
|
if (mpfi_has_zero(ptr_self) > 0) {
|
671
671
|
return Qtrue;
|
672
|
-
}else{
|
672
|
+
} else {
|
673
673
|
return Qnil;
|
674
674
|
}
|
675
675
|
}
|
@@ -681,7 +681,7 @@ static VALUE r_mpfi_nan_p (VALUE self)
|
|
681
681
|
r_mpfi_get_struct(ptr_self, self);
|
682
682
|
if (mpfi_nan_p(ptr_self) != 0) {
|
683
683
|
return Qtrue;
|
684
|
-
}else{
|
684
|
+
} else {
|
685
685
|
return Qnil;
|
686
686
|
}
|
687
687
|
}
|
@@ -693,7 +693,7 @@ static VALUE r_mpfi_inf_p (VALUE self)
|
|
693
693
|
r_mpfi_get_struct(ptr_self, self);
|
694
694
|
if (mpfi_inf_p(ptr_self) != 0) {
|
695
695
|
return Qtrue;
|
696
|
-
}else{
|
696
|
+
} else {
|
697
697
|
return Qnil;
|
698
698
|
}
|
699
699
|
}
|
@@ -705,7 +705,7 @@ static VALUE r_mpfi_bounded_p (VALUE self)
|
|
705
705
|
r_mpfi_get_struct(ptr_self, self);
|
706
706
|
if (mpfi_bounded_p(ptr_self) != 0) {
|
707
707
|
return Qtrue;
|
708
|
-
}else{
|
708
|
+
} else {
|
709
709
|
return Qnil;
|
710
710
|
}
|
711
711
|
}
|
@@ -722,7 +722,7 @@ static VALUE r_mpfi_equal_p (VALUE self, VALUE other)
|
|
722
722
|
if (mpfr_equal_p(r_mpfi_left_ptr(ptr_self), r_mpfi_left_ptr(ptr_other)) != 0 &&
|
723
723
|
mpfr_equal_p(r_mpfi_right_ptr(ptr_self), r_mpfi_right_ptr(ptr_other)) != 0) {
|
724
724
|
return Qtrue;
|
725
|
-
}else{
|
725
|
+
} else {
|
726
726
|
return Qnil;
|
727
727
|
}
|
728
728
|
}
|
@@ -831,7 +831,7 @@ static VALUE r_mpfi_alea (int argc, VALUE *argv, VALUE self)
|
|
831
831
|
/* ------------------------------ Conversion Functions start ------------------------------ */
|
832
832
|
|
833
833
|
/* Return float by mpfi_get_d(self). */
|
834
|
-
static VALUE r_mpfi_get_d(VALUE self)
|
834
|
+
static VALUE r_mpfi_get_d (VALUE self)
|
835
835
|
{
|
836
836
|
MPFI *ptr_self;
|
837
837
|
r_mpfi_get_struct(ptr_self, self);
|
@@ -839,7 +839,7 @@ static VALUE r_mpfi_get_d(VALUE self)
|
|
839
839
|
}
|
840
840
|
|
841
841
|
/* Return MPFR by mpfi_get_fr(ret, self). */
|
842
|
-
static VALUE r_mpfi_get_fr(VALUE self)
|
842
|
+
static VALUE r_mpfi_get_fr (VALUE self)
|
843
843
|
{
|
844
844
|
MPFI *ptr_self;
|
845
845
|
VALUE val_ret;
|
@@ -882,9 +882,9 @@ static VALUE r_mpfi_revert_if_needed (VALUE self)
|
|
882
882
|
{
|
883
883
|
MPFI *ptr_self;
|
884
884
|
r_mpfi_get_struct(ptr_self, self);
|
885
|
-
if(mpfi_revert_if_needed(ptr_self) != 0){
|
885
|
+
if (mpfi_revert_if_needed(ptr_self) != 0) {
|
886
886
|
return Qtrue;
|
887
|
-
}else{
|
887
|
+
} else {
|
888
888
|
return Qnil;
|
889
889
|
};
|
890
890
|
}
|
@@ -895,19 +895,19 @@ static VALUE r_mpfi_put (VALUE self, VALUE other)
|
|
895
895
|
MPFI *ptr_self;
|
896
896
|
r_mpfi_get_struct(ptr_self, self);
|
897
897
|
|
898
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
898
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
899
899
|
MPFI *ptr_other;
|
900
900
|
r_mpfi_get_struct(ptr_other, other);
|
901
901
|
r_mpfi_set_function_state(mpfi_put(ptr_self, ptr_other));
|
902
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
902
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
903
903
|
MPFR *ptr_other;
|
904
904
|
r_mpfr_get_struct(ptr_other, other);
|
905
905
|
r_mpfi_set_function_state(mpfi_put_fr(ptr_self, ptr_other));
|
906
|
-
}else if(TYPE(other) == T_FIXNUM){
|
906
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
907
907
|
r_mpfi_set_function_state(mpfi_put_si(ptr_self, FIX2LONG(other)));
|
908
|
-
}else if(TYPE(other) == T_FLOAT){
|
908
|
+
} else if (TYPE(other) == T_FLOAT) {
|
909
909
|
r_mpfi_set_function_state(mpfi_put_d(ptr_self, NUM2DBL(other)));
|
910
|
-
}else{
|
910
|
+
} else {
|
911
911
|
MPFI *ptr_other;
|
912
912
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
913
913
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
@@ -959,9 +959,9 @@ static VALUE r_mpfi_strictly_include (VALUE self, VALUE other)
|
|
959
959
|
MPFI *ptr_self, *ptr_other;
|
960
960
|
r_mpfi_get_struct(ptr_self, self);
|
961
961
|
r_mpfi_get_struct(ptr_other, other);
|
962
|
-
if(mpfi_is_strictly_inside(ptr_other, ptr_self) > 0){
|
962
|
+
if (mpfi_is_strictly_inside(ptr_other, ptr_self) > 0) {
|
963
963
|
return Qtrue;
|
964
|
-
}else{
|
964
|
+
} else {
|
965
965
|
return Qnil;
|
966
966
|
}
|
967
967
|
}
|
@@ -972,27 +972,27 @@ static VALUE r_mpfi_include (VALUE self, VALUE other)
|
|
972
972
|
MPFI *ptr_self;
|
973
973
|
int result;
|
974
974
|
r_mpfi_get_struct(ptr_self, self);
|
975
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))){
|
975
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, other))) {
|
976
976
|
MPFI *ptr_other;
|
977
977
|
r_mpfi_get_struct(ptr_other, other);
|
978
978
|
result = mpfi_is_inside(ptr_other, ptr_self);
|
979
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))){
|
979
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, other))) {
|
980
980
|
MPFR *ptr_other;
|
981
981
|
r_mpfr_get_struct(ptr_other, other);
|
982
982
|
result = mpfi_is_inside_fr(ptr_other, ptr_self);
|
983
|
-
}else if(TYPE(other) == T_FIXNUM){
|
983
|
+
} else if (TYPE(other) == T_FIXNUM) {
|
984
984
|
result = mpfi_is_inside_si(FIX2LONG(other), ptr_self);
|
985
|
-
}else if(TYPE(other) == T_FLOAT){
|
985
|
+
} else if (TYPE(other) == T_FLOAT) {
|
986
986
|
result = mpfi_is_inside_d(NUM2DBL(other), ptr_self);
|
987
|
-
}else{
|
987
|
+
} else {
|
988
988
|
MPFI *ptr_other;
|
989
989
|
volatile VALUE tmp_other = r_mpfi_new_fi_obj(other);
|
990
990
|
r_mpfi_get_struct(ptr_other, tmp_other);
|
991
991
|
result = mpfi_is_inside(ptr_other, ptr_self);
|
992
992
|
}
|
993
|
-
if(result > 0){
|
993
|
+
if (result > 0) {
|
994
994
|
return Qtrue;
|
995
|
-
}else{
|
995
|
+
} else {
|
996
996
|
return Qnil;
|
997
997
|
}
|
998
998
|
}
|
@@ -1002,9 +1002,9 @@ static VALUE r_mpfi_is_empty (VALUE self)
|
|
1002
1002
|
{
|
1003
1003
|
MPFI *ptr_self;
|
1004
1004
|
r_mpfi_get_struct(ptr_self, self);
|
1005
|
-
if(mpfi_is_empty(ptr_self) > 0){
|
1005
|
+
if (mpfi_is_empty(ptr_self) > 0) {
|
1006
1006
|
return Qtrue;
|
1007
|
-
}else{
|
1007
|
+
} else {
|
1008
1008
|
return Qnil;
|
1009
1009
|
}
|
1010
1010
|
}
|
@@ -1021,9 +1021,9 @@ static VALUE r_mpfi_intersect (int argc, VALUE *argv, VALUE self)
|
|
1021
1021
|
r_mpfi_get_struct(ptr_a0, argv[0]);
|
1022
1022
|
r_mpfi_make_struct_init2(val_ret, ptr_ret, r_mpfr_prec_from_optional_argument(1, 2, argc, argv));
|
1023
1023
|
r_mpfi_set_function_state(mpfi_intersect(ptr_ret, ptr_self, ptr_a0));
|
1024
|
-
if(mpfi_is_empty(ptr_ret) > 0){
|
1024
|
+
if (mpfi_is_empty(ptr_ret) > 0) {
|
1025
1025
|
return Qnil;
|
1026
|
-
}else{
|
1026
|
+
} else {
|
1027
1027
|
return val_ret;
|
1028
1028
|
}
|
1029
1029
|
}
|
@@ -1097,55 +1097,72 @@ static VALUE r_mpfi_bisect (int argc, VALUE *argv, VALUE self)
|
|
1097
1097
|
return rb_ary_new3(2, val_ret1, val_ret2);
|
1098
1098
|
}
|
1099
1099
|
|
1100
|
-
/*
|
1101
|
-
|
1102
|
-
void r_mpfi_subdivision_func(int num, MPFI *ret[], mpfi_t x)
|
1103
|
-
{
|
1104
|
-
int i;
|
1105
|
-
mpfr_t l;
|
1106
|
-
mpfr_t x_diam;
|
1107
|
-
mpfr_init(l);
|
1108
|
-
mpfr_sub(l, r_mpfi_right_ptr(x), r_mpfi_left_ptr(x), GMP_RNDD);
|
1109
|
-
mpfr_div_si(l, l, num, GMP_RNDD);
|
1110
|
-
mpfr_init(x_diam);
|
1111
|
-
mpfi_diam_abs(x_diam, x);
|
1112
|
-
if(mpfr_cmp(x_diam, l) > 0 && num > 1){
|
1113
|
-
mpfr_set(r_mpfi_left_ptr(ret[0]), r_mpfi_left_ptr(x), GMP_RNDN);
|
1114
|
-
mpfr_add(r_mpfi_right_ptr(ret[0]), r_mpfi_left_ptr(ret[0]), l, GMP_RNDU);
|
1115
|
-
|
1116
|
-
for(i = 1; i < num - 1; i ++){
|
1117
|
-
mpfr_set(r_mpfi_left_ptr(ret[i]), r_mpfi_right_ptr(ret[i - 1]), GMP_RNDN);
|
1118
|
-
mpfr_add(r_mpfi_right_ptr(ret[i]), r_mpfi_left_ptr(ret[i]), l, GMP_RNDU);
|
1119
|
-
}
|
1120
|
-
|
1121
|
-
mpfr_set(r_mpfi_left_ptr(ret[i]), r_mpfi_right_ptr(ret[i - 1]), GMP_RNDN);
|
1122
|
-
mpfr_set(r_mpfi_right_ptr(ret[i]), r_mpfi_right_ptr(x), GMP_RNDN);
|
1123
|
-
}else{
|
1124
|
-
mpfr_set(r_mpfi_left_ptr(ret[0]), r_mpfi_left_ptr(x), GMP_RNDN);
|
1125
|
-
mpfr_set(r_mpfi_right_ptr(ret[0]), r_mpfi_right_ptr(x), GMP_RNDN);
|
1126
|
-
}
|
1127
|
-
mpfr_clear(x_diam);
|
1128
|
-
mpfr_clear(l);
|
1129
|
-
}
|
1130
|
-
|
1131
|
-
/* Return array having MPFI instances by subdividing. */
|
1132
|
-
static VALUE r_mpfi_subdivision (int argc, VALUE *argv, VALUE self)
|
1100
|
+
/* Yield MPFI instances obtained by subdividing. */
|
1101
|
+
static VALUE r_mpfi_each_subdivision (int argc, VALUE *argv, VALUE self)
|
1133
1102
|
{
|
1134
|
-
MPFI *ptr_self
|
1135
|
-
int i, num, prec;
|
1136
|
-
|
1137
|
-
|
1103
|
+
MPFI *ptr_self;
|
1104
|
+
int i, num, prec, state = 0;
|
1105
|
+
mpfr_t ptr_self_diam, step, endpoint;
|
1106
|
+
VALUE ret;
|
1107
|
+
RETURN_ENUMERATOR(self, argc, argv);
|
1138
1108
|
num = NUM2INT(argv[0]);
|
1109
|
+
if (num <= 0) {
|
1110
|
+
rb_raise(rb_eArgError, "Split number must be positive.");
|
1111
|
+
}
|
1139
1112
|
prec = r_mpfr_prec_from_optional_argument(1, 2, argc, argv);
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1113
|
+
r_mpfi_get_struct(ptr_self, self);
|
1114
|
+
mpfr_init2(ptr_self_diam, prec);
|
1115
|
+
mpfr_init2(step, prec);
|
1116
|
+
mpfr_init2(endpoint, prec);
|
1117
|
+
mpfr_sub(step, r_mpfi_right_ptr(ptr_self), r_mpfi_left_ptr(ptr_self), GMP_RNDD);
|
1118
|
+
mpfr_div_si(step, step, num, GMP_RNDD);
|
1119
|
+
mpfi_diam_abs(ptr_self_diam, ptr_self);
|
1120
|
+
if (mpfr_cmp(ptr_self_diam, step) > 0 && num > 1) {
|
1121
|
+
{
|
1122
|
+
volatile VALUE obj;
|
1123
|
+
MPFI *ptr_obj;
|
1124
|
+
r_mpfi_make_struct_init2(obj, ptr_obj, prec);
|
1125
|
+
mpfr_set(r_mpfi_left_ptr(ptr_obj), r_mpfi_left_ptr(ptr_self), GMP_RNDD);
|
1126
|
+
mpfr_add(endpoint, r_mpfi_left_ptr(ptr_self), step, GMP_RNDU);
|
1127
|
+
mpfr_set(r_mpfi_right_ptr(ptr_obj), endpoint, GMP_RNDU);
|
1128
|
+
ret = rb_protect(rb_yield, obj, &state);
|
1129
|
+
}
|
1130
|
+
if (state == 0) {
|
1131
|
+
for (i = 1; i < num - 1; i++) {
|
1132
|
+
volatile VALUE obj;
|
1133
|
+
MPFI *ptr_obj;
|
1134
|
+
r_mpfi_make_struct_init2(obj, ptr_obj, prec);
|
1135
|
+
mpfr_set(r_mpfi_left_ptr(ptr_obj), endpoint, GMP_RNDD);
|
1136
|
+
mpfr_add(endpoint, endpoint, step, GMP_RNDU);
|
1137
|
+
mpfr_set(r_mpfi_right_ptr(ptr_obj), endpoint, GMP_RNDU);
|
1138
|
+
ret = rb_protect(rb_yield, obj, &state);
|
1139
|
+
if (state != 0) {
|
1140
|
+
break;
|
1141
|
+
}
|
1142
|
+
}
|
1143
|
+
if (state == 0) {
|
1144
|
+
volatile VALUE obj;
|
1145
|
+
MPFI *ptr_obj;
|
1146
|
+
r_mpfi_make_struct_init2(obj, ptr_obj, prec);
|
1147
|
+
mpfr_set(r_mpfi_left_ptr(ptr_obj), endpoint, GMP_RNDD);
|
1148
|
+
mpfr_set(r_mpfi_right_ptr(ptr_obj), r_mpfi_right_ptr(ptr_self), GMP_RNDU);
|
1149
|
+
ret = rb_protect(rb_yield, obj, &state);
|
1150
|
+
}
|
1151
|
+
}
|
1152
|
+
} else {
|
1153
|
+
volatile VALUE obj;
|
1154
|
+
MPFI *ptr_obj;
|
1155
|
+
r_mpfi_make_struct_init2(obj, ptr_obj, prec);
|
1156
|
+
mpfr_set(r_mpfi_left_ptr(ptr_obj), r_mpfi_left_ptr(ptr_self), GMP_RNDD);
|
1157
|
+
mpfr_set(r_mpfi_right_ptr(ptr_obj), r_mpfi_right_ptr(ptr_self), GMP_RNDU);
|
1158
|
+
ret = rb_protect(rb_yield, obj, &state);
|
1159
|
+
}
|
1160
|
+
mpfr_clear(ptr_self_diam);
|
1161
|
+
mpfr_clear(endpoint);
|
1162
|
+
mpfr_clear(step);
|
1163
|
+
if (state != 0) {
|
1164
|
+
rb_jump_tag(state);
|
1144
1165
|
}
|
1145
|
-
r_mpfi_subdivision_func(num, f, ptr_self);
|
1146
|
-
ret = rb_ary_new4(num, vf);
|
1147
|
-
free(vf);
|
1148
|
-
free(f);
|
1149
1166
|
return ret;
|
1150
1167
|
}
|
1151
1168
|
/* ------------------------------ Miscellaneous Interval Functions end ------------------------------ */
|
@@ -1161,19 +1178,19 @@ static VALUE r_mpfi_math_add (int argc, VALUE *argv, VALUE self)
|
|
1161
1178
|
r_mpfi_make_struct_init2(val_ret, ptr_ret, r_mpfr_prec_from_optional_argument(2, 3, argc, argv));
|
1162
1179
|
tmp_argv0 = r_mpfi_new_fi_obj(argv[0]);
|
1163
1180
|
r_mpfi_get_struct(ptr_a0, tmp_argv0);
|
1164
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))){
|
1181
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))) {
|
1165
1182
|
MPFI *ptr_other;
|
1166
1183
|
r_mpfi_get_struct(ptr_other, argv[1]);
|
1167
1184
|
r_mpfi_set_function_state(mpfi_add(ptr_ret, ptr_a0, ptr_other));
|
1168
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))){
|
1185
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))) {
|
1169
1186
|
MPFR *ptr_other;
|
1170
1187
|
r_mpfr_get_struct(ptr_other, argv[1]);
|
1171
1188
|
r_mpfi_set_function_state(mpfi_add_fr(ptr_ret, ptr_a0, ptr_other));
|
1172
|
-
}else if(TYPE(argv[1]) == T_FIXNUM){
|
1189
|
+
} else if (TYPE(argv[1]) == T_FIXNUM) {
|
1173
1190
|
r_mpfi_set_function_state(mpfi_add_si(ptr_ret, ptr_a0, FIX2LONG(argv[1])));
|
1174
|
-
}else if(TYPE(argv[1]) == T_FLOAT){
|
1191
|
+
} else if (TYPE(argv[1]) == T_FLOAT) {
|
1175
1192
|
r_mpfi_set_function_state(mpfi_add_d(ptr_ret, ptr_a0, NUM2DBL(argv[1])));
|
1176
|
-
}else{
|
1193
|
+
} else {
|
1177
1194
|
MPFI *ptr_a2;
|
1178
1195
|
volatile VALUE tmp_argv1 = r_mpfi_new_fi_obj(argv[1]);
|
1179
1196
|
r_mpfi_get_struct(ptr_a2, tmp_argv1);
|
@@ -1191,19 +1208,19 @@ static VALUE r_mpfi_math_sub (int argc, VALUE *argv, VALUE self)
|
|
1191
1208
|
r_mpfi_make_struct_init2(val_ret, ptr_ret, r_mpfr_prec_from_optional_argument(2, 3, argc, argv));
|
1192
1209
|
tmp_argv0 = r_mpfi_new_fi_obj(argv[0]);
|
1193
1210
|
r_mpfi_get_struct(ptr_a0, tmp_argv0);
|
1194
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))){
|
1211
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))) {
|
1195
1212
|
MPFI *ptr_other;
|
1196
1213
|
r_mpfi_get_struct(ptr_other, argv[1]);
|
1197
1214
|
r_mpfi_set_function_state(mpfi_sub(ptr_ret, ptr_a0, ptr_other));
|
1198
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))){
|
1215
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))) {
|
1199
1216
|
MPFR *ptr_other;
|
1200
1217
|
r_mpfr_get_struct(ptr_other, argv[1]);
|
1201
1218
|
r_mpfi_set_function_state(mpfi_sub_fr(ptr_ret, ptr_a0, ptr_other));
|
1202
|
-
}else if(TYPE(argv[1]) == T_FIXNUM){
|
1219
|
+
} else if (TYPE(argv[1]) == T_FIXNUM) {
|
1203
1220
|
r_mpfi_set_function_state(mpfi_sub_si(ptr_ret, ptr_a0, FIX2LONG(argv[1])));
|
1204
|
-
}else if(TYPE(argv[1]) == T_FLOAT){
|
1221
|
+
} else if (TYPE(argv[1]) == T_FLOAT) {
|
1205
1222
|
r_mpfi_set_function_state(mpfi_sub_d(ptr_ret, ptr_a0, NUM2DBL(argv[1])));
|
1206
|
-
}else{
|
1223
|
+
} else {
|
1207
1224
|
MPFI *ptr_a2;
|
1208
1225
|
volatile VALUE tmp_argv1 = r_mpfi_new_fi_obj(argv[1]);
|
1209
1226
|
r_mpfi_get_struct(ptr_a2, tmp_argv1);
|
@@ -1221,19 +1238,19 @@ static VALUE r_mpfi_math_mul (int argc, VALUE *argv, VALUE self)
|
|
1221
1238
|
r_mpfi_make_struct_init2(val_ret, ptr_ret, r_mpfr_prec_from_optional_argument(2, 3, argc, argv));
|
1222
1239
|
tmp_argv0 = r_mpfi_new_fi_obj(argv[0]);
|
1223
1240
|
r_mpfi_get_struct(ptr_a0, tmp_argv0);
|
1224
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))){
|
1241
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))) {
|
1225
1242
|
MPFI *ptr_other;
|
1226
1243
|
r_mpfi_get_struct(ptr_other, argv[1]);
|
1227
1244
|
r_mpfi_set_function_state(mpfi_mul(ptr_ret, ptr_a0, ptr_other));
|
1228
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))){
|
1245
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))) {
|
1229
1246
|
MPFR *ptr_other;
|
1230
1247
|
r_mpfr_get_struct(ptr_other, argv[1]);
|
1231
1248
|
r_mpfi_set_function_state(mpfi_mul_fr(ptr_ret, ptr_a0, ptr_other));
|
1232
|
-
}else if(TYPE(argv[1]) == T_FIXNUM){
|
1249
|
+
} else if (TYPE(argv[1]) == T_FIXNUM) {
|
1233
1250
|
r_mpfi_set_function_state(mpfi_mul_si(ptr_ret, ptr_a0, FIX2LONG(argv[1])));
|
1234
|
-
}else if(TYPE(argv[1]) == T_FLOAT){
|
1251
|
+
} else if (TYPE(argv[1]) == T_FLOAT) {
|
1235
1252
|
r_mpfi_set_function_state(mpfi_mul_d(ptr_ret, ptr_a0, NUM2DBL(argv[1])));
|
1236
|
-
}else{
|
1253
|
+
} else {
|
1237
1254
|
MPFI *ptr_a2;
|
1238
1255
|
volatile VALUE tmp_argv1 = r_mpfi_new_fi_obj(argv[1]);
|
1239
1256
|
r_mpfi_get_struct(ptr_a2, tmp_argv1);
|
@@ -1251,19 +1268,19 @@ static VALUE r_mpfi_math_div (int argc, VALUE *argv, VALUE self)
|
|
1251
1268
|
r_mpfi_make_struct_init2(val_ret, ptr_ret, r_mpfr_prec_from_optional_argument(2, 3, argc, argv));
|
1252
1269
|
tmp_argv0 = r_mpfi_new_fi_obj(argv[0]);
|
1253
1270
|
r_mpfi_get_struct(ptr_a0, tmp_argv0);
|
1254
|
-
if(RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))){
|
1271
|
+
if (RTEST(rb_funcall(__mpfi_class__, eqq, 1, argv[1]))) {
|
1255
1272
|
MPFI *ptr_other;
|
1256
1273
|
r_mpfi_get_struct(ptr_other, argv[1]);
|
1257
1274
|
r_mpfi_set_function_state(mpfi_div(ptr_ret, ptr_a0, ptr_other));
|
1258
|
-
}else if(RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))){
|
1275
|
+
} else if (RTEST(rb_funcall(__mpfr_class__, eqq, 1, argv[1]))) {
|
1259
1276
|
MPFR *ptr_other;
|
1260
1277
|
r_mpfr_get_struct(ptr_other, argv[1]);
|
1261
1278
|
r_mpfi_set_function_state(mpfi_div_fr(ptr_ret, ptr_a0, ptr_other));
|
1262
|
-
}else if(TYPE(argv[1]) == T_FIXNUM){
|
1279
|
+
} else if (TYPE(argv[1]) == T_FIXNUM) {
|
1263
1280
|
r_mpfi_set_function_state(mpfi_div_si(ptr_ret, ptr_a0, FIX2LONG(argv[1])));
|
1264
|
-
}else if(TYPE(argv[1]) == T_FLOAT){
|
1281
|
+
} else if (TYPE(argv[1]) == T_FLOAT) {
|
1265
1282
|
r_mpfi_set_function_state(mpfi_div_d(ptr_ret, ptr_a0, NUM2DBL(argv[1])));
|
1266
|
-
}else{
|
1283
|
+
} else {
|
1267
1284
|
MPFI *ptr_a2;
|
1268
1285
|
volatile VALUE tmp_argv1 = r_mpfi_new_fi_obj(argv[1]);
|
1269
1286
|
r_mpfi_get_struct(ptr_a2, tmp_argv1);
|
@@ -1688,7 +1705,7 @@ void Init_mpfi()
|
|
1688
1705
|
rb_define_method(r_mpfi_class, "increase", r_mpfi_increase, 1);
|
1689
1706
|
rb_define_method(r_mpfi_class, "blow", r_mpfi_blow, -1);
|
1690
1707
|
rb_define_method(r_mpfi_class, "bisect", r_mpfi_bisect, -1);
|
1691
|
-
rb_define_method(r_mpfi_class, "
|
1708
|
+
rb_define_method(r_mpfi_class, "each_subdivision", r_mpfi_each_subdivision, -1);
|
1692
1709
|
/* ------------------------------ Miscellaneous Interval Functions end ------------------------------ */
|
1693
1710
|
|
1694
1711
|
r_mpfi_math = rb_define_module_under(r_mpfi_class, "Math");
|
@@ -1740,4 +1757,3 @@ void Init_mpfi()
|
|
1740
1757
|
__sym_to_str__ = rb_eval_string(":to_str");
|
1741
1758
|
|
1742
1759
|
}
|
1743
|
-
|