coercee$B$N$3$H$r7|G0$7$F$$$i$C$7$c$C$?$o$1$J$s$G$9$+!#$9$_$^$;e(B
e$B$s!";d$O$3$3$G$O9M$($F$$$^$;$s$G$7$?!#e(B[ruby-dev:38671]e$B$Ge(B
e$B!VL$CN$N%/%i%9!W$H$$C$7$c$C$F$k$s$@$+$i!"EvA39M$($F$$/$Y$-e(B
e$B$G$7$?$M!#e(B
e$B$I$&$bKM$N@bL@$bHsF;$$$b$N$G!"M}2r$,Fq$7$$$h$&$J5$$,$7$^$9$,!#e(B
e$BL58BBg$H$NHf3S$,=PMh$l$P!"$=$l$GL58BBg$+$I$&$+H=CG$G$-$k$o$1$G$9$+$ie(B
infinite?
e$B$H$+$J$/$F$b<h$j4:$($:$J$s$H$+$J$k!"$H$$$&9M$($b$"$j$^$7$?$,e(B
e$B$d$O$j87$7$$$h$&$J5$$,$7$^$9!#e(B
e$B$7$+$b!"L58BBg$+$I$&$+H=CG$9$k$N$O8zN($b0-$$>e$K40A4$G$b$J$$$G$9$+$i!#e(B
e$B$^$D$b$H$5$s$,9M$($F$$$k$N$H0c$&$+$b$7$l$^$;$s$,!“e(Binfinite?
e$B$,$”$k$H$$e(B
e$B$&A0Ds$G$"$/$^$G;n83E*$K=q$$$F$_$^$7$?$1$I!"$$$+$K$b$H$C$F$D$1$?$h$&$G$9!#e(B
Index: numeric.c
— numeric.c (revision 23732)
+++ numeric.c (working copy)
@@ -417,6 +417,24 @@
return Qfalse;
}
+static VALUE
+num_nan_p(VALUE num)
+{
+static VALUE
+num_infinite_p(VALUE num)
+{
+static VALUE
+num_finite_p(VALUE num)
+{
/*
@@ -673,9 +691,21 @@
}
}
+#define f_finite_p(x) rb_funcall(x, rb_intern(“finite?”), 0)
+#define f_infinite(x) rb_funcall(x, rb_intern(“infinite?”), 0)
+#define f_infinite_p(x) (!NIL_P(f_infinite(x)))
+#define f_negative_p(x) rb_funcall(x, ‘<’, 1, INT2FIX(0))
+
static VALUE
flo_quo(VALUE x, VALUE y)
{
- if (f_infinite_p(x) && f_finite_p(y))
- return rb_float_new((f_negative_p(x) == f_negative_p(y))
-
? HUGE_VAL : -HUGE_VAL);
- if (f_finite_p(x) && f_infinite_p(y))
- return rb_float_new((f_negative_p(x) == f_negative_p(y))
-
? 0.0 : -0.0);
- return rb_funcall(x, ‘/’, 1, y);
}
@@ -3179,6 +3209,9 @@
rb_define_method(rb_cNumeric, "real?", num_real_p, 0);
rb_define_method(rb_cNumeric, "integer?", num_int_p, 0);
- rb_define_method(rb_cNumeric, “nan?”, num_nan_p, 0);
- rb_define_method(rb_cNumeric, “infinite?”, num_infinite_p, 0);
- rb_define_method(rb_cNumeric, “finite?”, num_finite_p, 0);
rb_define_method(rb_cNumeric, “zero?”, num_zero_p, 0);
rb_define_method(rb_cNumeric, “nonzero?”, num_nonzero_p, 0);
Index: bignum.c
— bignum.c (revision 23732)
+++ bignum.c (working copy)
@@ -2451,12 +2451,20 @@
*
*/
+#define f_finite_p(x) rb_funcall(x, rb_intern(“finite?”), 0)
+#define f_infinite(x) rb_funcall(x, rb_intern(“infinite?”), 0)
+#define f_infinite_p(x) (!NIL_P(f_infinite(x)))
+#define f_negative_p(x) rb_funcall(x, ‘<’, 1, INT2FIX(0))
VALUE
rb_big_fdiv(VALUE x, VALUE y)
{
double dx, dy;
- if (f_infinite_p(y))
- return rb_float_new((f_negative_p(x) == f_negative_p(y))
-
? 0.0 : -0.0);
- dx = big2dbl(x);
switch (TYPE(y)) {
case T_FIXNUM:
Index: rational.c
===================================================================
— rational.c (revision 23732)
+++ rational.c (working copy)
@@ -766,9 +766,17 @@
}
}
+#define f_finite_p(x) rb_funcall(x, rb_intern(“finite?”), 0)
+#define f_infinite(x) rb_funcall(x, rb_intern(“infinite?”), 0)
+#define f_infinite_p(x) (!NIL_P(f_infinite(x)))
+
static VALUE
nurat_fdiv(VALUE self, VALUE other)
{
- if (f_infinite_p(other))
- return rb_float_new((f_negative_p(self) == f_negative_p(other))
-
? 0.0 : -0.0);
- return f_to_f(f_div(self, other));
}