62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'ext/fraction/fraction.c', line 62
VALUE fraction_create_fraction_from(int argc, VALUE * argv, VALUE self)
{
VALUE fraction = rb_class_new_instance(0, NULL, rb_cFraction);
VALUE res = rb_ary_new2(3);
VALUE maxdenr;
long maxden = 10; // the default
rb_scan_args(argc, argv, "01", &maxdenr);
if (!NIL_P(maxdenr))
maxden = NUM2INT(maxdenr);
double x = NUM2DBL(self);
long n, d;
double e;
core_fraction(x, maxden, &n, &d, &e);
VALUE numer1 = INT2NUM(n);
VALUE denom1 = INT2NUM(d);
VALUE err1 = rb_float_new(e);
rb_iv_set(fraction, "@numerator", numer1);
rb_iv_set(fraction, "@denominator", denom1);
rb_iv_set(fraction, "@error", err1);
return fraction;
}
|