@Override public IRubyObject fdivDouble(ThreadContext context, IRubyObject y) { double dx, dy; dx = getDoubleValue(); if (y instanceof RubyFixnum) { long ly = ((RubyFixnum) y).getLongValue(); if (Double.isInfinite(dx)) { return fdivInt(context.runtime, BigDecimal.valueOf(ly)); } dy = (double) ly; } else if (y instanceof RubyBignum) { return fdivDouble(context, (RubyBignum) y); } else if (y instanceof RubyFloat) { dy = ((RubyFloat) y).getDoubleValue(); if (Double.isNaN(dy)) { return context.runtime.newFloat(dy); } if (Double.isInfinite(dx)) { return fdivFloat(context, (RubyFloat) y); } } else { return coerceBin(context, sites(context).fdiv, y); } return context.runtime.newFloat(dx / dy); }
@Override public IRubyObject fdivDouble(ThreadContext context, IRubyObject y) { double dx, dy; dx = getDoubleValue(); if (y instanceof RubyFixnum) { long ly = ((RubyFixnum) y).getLongValue(); if (Double.isInfinite(dx)) { return fdivInt(context.runtime, BigDecimal.valueOf(ly)); } dy = (double) ly; } else if (y instanceof RubyBignum) { return fdivDouble(context, (RubyBignum) y); } else if (y instanceof RubyFloat) { dy = ((RubyFloat) y).getDoubleValue(); if (Double.isNaN(dy)) { return context.runtime.newFloat(dy); } if (Double.isInfinite(dx)) { return fdivFloat(context, (RubyFloat) y); } } else { return coerceBin(context, sites(context).fdiv, y); } return context.runtime.newFloat(dx / dy); }