class Numeric

Public Instance Methods

cbrt → num click to toggle source

Cube root.

27.cbrt       #=> 3.0
VALUE
rb_num_cbrt( VALUE num)
{
#if HAVE_FUNC_CBRT
    return rb_float_new( cbrt( RFLOAT_VALUE( rb_Float( num))));
#else
    double n;
    int neg;
    int i;

    n = RFLOAT_VALUE( rb_Float( num));
    if ((neg = n < 0))
      n = -n;
    n = sqrt( sqrt( n));
    i = 2;
    for (;;) {
      double w = n;
      int j;

      for (j=i;j;--j) w = sqrt( w);
      i *= 2;
      w *= n;
      if (n == w) break;
      n = w;
    }
    return rb_float_new( neg ? -n : n);
#endif
}
grammatical sing, plu → str click to toggle source

Singular or plural

1.grammatical "line", "lines"         #=>  "line"
6.grammatical "child", "children"     #=>  "children"
VALUE
rb_num_grammatical( VALUE num, VALUE sing, VALUE plu)
{
    long l;
    double d;

    switch (TYPE( num)) {
        case T_FIXNUM:
            l = NUM2LONG( num);
            if (l == 1l || l == -1l)
                return sing;
            break;

        case T_BIGNUM:
            /* 1 is not a Bignum */
            break;

        case T_FLOAT:
            d = RFLOAT_VALUE( num);
            if (d == 1.0 || d == -1.0)
                return sing;
            break;

        default:
            l = NUM2LONG( rb_funcall( num, id_cmp, 1, INT2FIX( 1)));
            if (l == 0)
                return sing;
            l = NUM2LONG( rb_funcall( num, id_cmp, 1, INT2FIX(-1)));
            if (l == 0)
                return sing;
            break;
    }
    return plu;
}
neg? → true or false click to toggle source

Check whether num is negative.

VALUE
rb_num_neg_p( VALUE num)
{
    VALUE r = Qfalse;

    switch (TYPE( num)) {
        case T_FIXNUM:
            if (NUM2LONG( num) < 0)
                r = Qtrue;
            break;

        case T_BIGNUM:
            if (!RBIGNUM_SIGN( num))  /* 0 is not a Bignum. */
                r = Qtrue;
            break;

        case T_FLOAT:
            if (RFLOAT_VALUE( num) < 0.0)
                r = Qtrue;
            break;

        default:
            return rb_num_neg_p( rb_funcall( num, id_cmp, 1, INT2FIX( 0)));
            break;
    }
    return r;
}
pos? → true or false click to toggle source

Check whether num is positive.

VALUE
rb_num_pos_p( VALUE num)
{
    VALUE r = Qfalse;

    switch (TYPE( num)) {
        case T_FIXNUM:
            if (NUM2LONG( num) > 0)
                r = Qtrue;
            break;

        case T_BIGNUM:
            if (RBIGNUM_SIGN( num))  /* 0 is not a Bignum. */
                r = Qtrue;
            break;

        case T_FLOAT:
            if (RFLOAT_VALUE( num) > 0.0)
                r = Qtrue;
            break;

        default:
            return rb_num_neg_p( rb_funcall( INT2FIX( 0), id_cmp, 1, num));
            break;
    }
    return r;
}
sqrt → num click to toggle source

Square root.

144.sqrt       #=> 12.0
VALUE
rb_num_sqrt( VALUE num)
{
    return rb_float_new( sqrt( RFLOAT_VALUE( rb_Float( num))));
}