o:$YARD::CodeObjects::MethodObject:
@name:quo:@docstringIC:YARD::Docstring"ÈReturns the floating point result of dividing big by
numeric.
-1234567890987654321.quo(13731) #=> -89910996357705.5
-1234567890987654321.quo(13731.24) #=> -89909424858035.7
:@objectu:YARD::StubProxyBignum#quo:
@summary0: @all"Returns the floating point result of dividing big by
numeric.
-1234567890987654321.quo(13731) #=> -89910996357705.5
-1234567890987654321.quo(13731.24) #=> -89909424858035.7
@overload quo(numeric)
@return [Float]
@overload fdiv(numeric)
@return [Float]:@ref_tags[ :
@tags[o:YARD::Tags::OverloadTag
;
u;Bignum#quo;;;IC; "
;
u;Bignum#quo;0;
"@return [Float];[ ;[o:YARD::Tags::Tag
;
0;0:@types["
Float:
@text" :@tag_name"return;0:@parameters[[:numeric0;0:@signature"quo(numeric);"
overloado;
;
u;Bignum#quo;: fdiv;IC; "
;
u;Bignum#quo;0;
"@return [Float];[ ;[o;
;
0;0;["
Float;" ;"return;0;[[;0;0;"fdiv(numeric);"
overload:@current_file_has_commentsF:@scope:
instance;[ :@docstring_extra0:@files[["
bignum.c0:@namespaceu;Bignum:
@path"Bignum#quo;[ :@visibility:public:@source"/*
* call-seq:
* big.quo(numeric) -> float
* big.fdiv(numeric) -> float
*
* Returns the floating point result of dividing big by
* numeric.
*
* -1234567890987654321.quo(13731) #=> -89910996357705.5
* -1234567890987654321.quo(13731.24) #=> -89909424858035.7
*
*/
static VALUE
rb_big_quo(x, y)
VALUE x, y;
{
double dx = big2dbl(x);
double dy;
if (isinf(dx)) {
#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)
VALUE z;
int ex, ey;
ex = (RBIGNUM(bigtrunc(x))->len - 1) * BITSPERDIG;
ex += bdigbitsize(BDIGITS(x)[RBIGNUM(x)->len - 1]);
ex -= 2 * DBL_BIGDIG * BITSPERDIG;
if (ex) x = big_shift(x, ex);
switch (TYPE(y)) {
case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
case T_BIGNUM: {
ey = (RBIGNUM(bigtrunc(y))->len - 1) * BITSPERDIG;
ey += bdigbitsize(BDIGITS(y)[RBIGNUM(y)->len - 1]);
ey -= DBL_BIGDIG * BITSPERDIG;
if (ey) y = big_shift(y, ey);
bignum:
bigdivrem(x, y, &z, 0);
return rb_float_new(ldexp(big2dbl(z), ex - ey));
}
case T_FLOAT:
y = dbl2big(ldexp(frexp(RFLOAT(y)->value, &ey), DBL_MANT_DIG));
ey -= DBL_MANT_DIG;
goto bignum;
}
}
switch (TYPE(y)) {
case T_FIXNUM:
dy = (double)FIX2LONG(y);
break;
case T_BIGNUM:
dy = rb_big2dbl(y);
break;
case T_FLOAT:
dy = RFLOAT(y)->value;
break;
default:
return rb_num_coerce_bin(x, y);
}
return rb_float_new(dx / dy);
}:@source_type:c