Class: Fixnum
Overview
******************************************************************
A <code>Fixnum</code> holds <code>Integer</code> values that can be
represented in a native machine word (minus 1 bit). If any operation
on a <code>Fixnum</code> exceeds this range, the value is
automatically converted to a <code>Bignum</code>.
<code>Fixnum</code> objects have immediate value. This means that
when they are assigned or passed as parameters, the actual object is
passed, rather than a reference to that object. Assignment does not
alias <code>Fixnum</code> objects. There is effectively only one
<code>Fixnum</code> object instance for any given integer value, so,
for example, you cannot add a singleton method to a
<code>Fixnum</code>.
Instance Method Summary collapse
-
#% ⇒ Object
Returns
fix
moduloother
. -
#&(integer) ⇒ Object
Bitwise AND.
-
#*(numeric) ⇒ Object
Performs multiplication: the class of the resulting object depends on the class of
numeric
and on the magnitude of the result. -
#**(numeric) ⇒ Object
Raises
fix
to thenumeric
power, which may be negative or fractional. -
#+(numeric) ⇒ Object
Performs addition: the class of the resulting object depends on the class of
numeric
and on the magnitude of the result. -
#-(numeric) ⇒ Object
Performs subtraction: the class of the resulting object depends on the class of
numeric
and on the magnitude of the result. -
#- ⇒ Integer
Negates
fix
(which might return a Bignum). -
#/(numeric) ⇒ Object
Performs division: the class of the resulting object depends on the class of
numeric
and on the magnitude of the result. -
#<(real) ⇒ Boolean
Returns
true
if the value offix
is less than that ofreal
. -
#<<(count) ⇒ Integer
Shifts fix left count positions (right if count is negative).
-
#<=(real) ⇒ Boolean
Returns
true
if the value offix
is less than or equal to that ofreal
. -
#<=>(numeric) ⇒ -1, ...
Comparison---Returns -1, 0, +1 or nil depending on whether fix is less than, equal to, or greater than numeric.
-
#==(other) ⇒ Boolean
Return
true
iffix
equalsother
numerically. -
#==(other) ⇒ Boolean
Return
true
iffix
equalsother
numerically. -
#>(real) ⇒ Boolean
Returns
true
if the value offix
is greater than that ofreal
. -
#>=(real) ⇒ Boolean
Returns
true
if the value offix
is greater than or equal to that ofreal
. -
#>>(count) ⇒ Integer
Shifts fix right count positions (left if count is negative).
-
#[](n) ⇒ 0, 1
Bit Reference---Returns the nth bit in the binary representation of fix, where fix[0] is the least significant bit.
-
#^(integer) ⇒ Object
Bitwise EXCLUSIVE OR.
-
#abs ⇒ Object
Returns the absolute value of fix.
-
#div(numeric) ⇒ Integer
Performs integer division: returns integer value.
-
#divmod(numeric) ⇒ Array
See
Numeric#divmod
. -
#even? ⇒ Boolean
Returns
true
if fix is an even number. -
#fdiv(numeric) ⇒ Float
Returns the floating point result of dividing fix by numeric.
-
#magnitude ⇒ Object
Returns the absolute value of fix.
-
#modulo ⇒ Object
Returns
fix
moduloother
. -
#odd? ⇒ Boolean
Returns
true
if fix is an odd number. -
#size ⇒ Fixnum
Returns the number of bytes in the machine representation of a
Fixnum
. -
#succ ⇒ Object
Returns the
Integer
equal to int + 1. -
#to_f ⇒ Float
Converts fix to a
Float
. -
#to_s(base = 10) ⇒ String
(also: #inspect)
Returns a string containing the representation of fix radix base (between 2 and 36).
-
#zero? ⇒ Boolean
Returns
true
if fix is zero. -
#|(integer) ⇒ Object
Bitwise OR.
-
#~ ⇒ Integer
One's complement: returns a number where each bit is flipped.
Methods inherited from Integer
#ceil, #chr, #denominator, #downto, #floor, #gcd, #gcdlcm, #integer?, #lcm, #next, #numerator, #ord, #pred, #rationalize, #round, #times, #to_i, #to_int, #to_r, #truncate, #upto
Methods inherited from Numeric
#+@, #abs2, #angle, #arg, #ceil, #coerce, #conj, #conjugate, #denominator, #eql?, #floor, #i, #imag, #imaginary, #initialize_copy, #integer?, #nonzero?, #numerator, #phase, #polar, #quo, #real, #real?, #rect, #rectangular, #remainder, #round, #singleton_method_added, #step, #to_c, #to_int, #truncate
Methods included from Comparable
Instance Method Details
#%(other) ⇒ Object #modulo(other) ⇒ Object
Returns fix
modulo other
. See numeric.divmod
for more information.
2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 |
# File 'numeric.c', line 2843
static VALUE
fix_mod(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long mod;
fixdivmod(FIX2LONG(x), FIX2LONG(y), 0, &mod);
return LONG2NUM(mod);
}
switch (TYPE(y)) {
case T_BIGNUM:
x = rb_int2big(FIX2LONG(x));
return rb_big_modulo(x, y);
case T_FLOAT:
return DBL2NUM(ruby_float_mod((double)FIX2LONG(x), RFLOAT_VALUE(y)));
default:
return rb_num_coerce_bin(x, y, '%');
}
}
|
#&(integer) ⇒ Object
Bitwise AND.
3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 |
# File 'numeric.c', line 3206
static VALUE
fix_and(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long val = FIX2LONG(x) & FIX2LONG(y);
return LONG2NUM(val);
}
if (RB_TYPE_P(y, T_BIGNUM)) {
return rb_big_and(y, x);
}
bit_coerce(&x, &y, TRUE);
return rb_funcall(x, rb_intern("&"), 1, y);
}
|
#*(numeric) ⇒ Object
Performs multiplication: the class of the resulting object depends on the class of numeric
and on the magnitude of the result.
2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 |
# File 'numeric.c', line 2669
static VALUE
fix_mul(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
#ifdef __HP_cc
/* avoids an optimization bug of HP aC++/ANSI C B3910B A.06.05 [Jul 25 2005] */
volatile
#endif
long a, b;
#if SIZEOF_LONG * 2 <= SIZEOF_LONG_LONG
LONG_LONG d;
#else
volatile long c;
VALUE r;
#endif
a = FIX2LONG(x);
b = FIX2LONG(y);
#if SIZEOF_LONG * 2 <= SIZEOF_LONG_LONG
d = (LONG_LONG)a * b;
if (FIXABLE(d)) return LONG2FIX(d);
return rb_ll2inum(d);
#else
if (FIT_SQRT_LONG(a) && FIT_SQRT_LONG(b))
return LONG2FIX(a*b);
c = a * b;
r = LONG2FIX(c);
if (a == 0) return x;
if (FIX2LONG(r) != c || c/a != b) {
r = rb_big_mul(rb_int2big(a), rb_int2big(b));
}
return r;
#endif
}
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_mul(y, x);
case T_FLOAT:
return DBL2NUM((double)FIX2LONG(x) * RFLOAT_VALUE(y));
default:
return rb_num_coerce_bin(x, y, '*');
}
}
|
#**(numeric) ⇒ Object
Raises fix
to the numeric
power, which may be negative or fractional.
2 ** 3 #=> 8
2 ** -1 #=> (1/2)
2 ** 0.5 #=> 1.4142135623731
2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 |
# File 'numeric.c', line 2946
static VALUE
fix_pow(VALUE x, VALUE y)
{
long a = FIX2LONG(x);
if (FIXNUM_P(y)) {
long b = FIX2LONG(y);
if (a == 1) return INT2FIX(1);
if (a == -1) {
if (b % 2 == 0)
return INT2FIX(1);
else
return INT2FIX(-1);
}
if (b < 0)
return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
if (b == 0) return INT2FIX(1);
if (b == 1) return x;
if (a == 0) {
if (b > 0) return INT2FIX(0);
return DBL2NUM(INFINITY);
}
return int_pow(a, b);
}
switch (TYPE(y)) {
case T_BIGNUM:
if (a == 1) return INT2FIX(1);
if (a == -1) {
if (int_even_p(y)) return INT2FIX(1);
else return INT2FIX(-1);
}
if (negative_int_p(y))
return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
if (a == 0) return INT2FIX(0);
x = rb_int2big(FIX2LONG(x));
return rb_big_pow(x, y);
case T_FLOAT:
if (RFLOAT_VALUE(y) == 0.0) return DBL2NUM(1.0);
if (a == 0) {
return DBL2NUM(RFLOAT_VALUE(y) < 0 ? INFINITY : 0.0);
}
if (a == 1) return DBL2NUM(1.0);
{
double dy = RFLOAT_VALUE(y);
if (a < 0 && dy != round(dy))
return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
return DBL2NUM(pow((double)a, dy));
}
default:
return rb_num_coerce_bin(x, y, rb_intern("**"));
}
}
|
#+(numeric) ⇒ Object
Performs addition: the class of the resulting object depends on the class of numeric
and on the magnitude of the result.
2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 |
# File 'numeric.c', line 2598
static VALUE
fix_plus(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long a, b, c;
VALUE r;
a = FIX2LONG(x);
b = FIX2LONG(y);
c = a + b;
r = LONG2NUM(c);
return r;
}
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_plus(y, x);
case T_FLOAT:
return DBL2NUM((double)FIX2LONG(x) + RFLOAT_VALUE(y));
default:
return rb_num_coerce_bin(x, y, '+');
}
}
|
#-(numeric) ⇒ Object
Performs subtraction: the class of the resulting object depends on the class of numeric
and on the magnitude of the result.
2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 |
# File 'numeric.c', line 2631
static VALUE
fix_minus(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long a, b, c;
VALUE r;
a = FIX2LONG(x);
b = FIX2LONG(y);
c = a - b;
r = LONG2NUM(c);
return r;
}
switch (TYPE(y)) {
case T_BIGNUM:
x = rb_int2big(FIX2LONG(x));
return rb_big_minus(x, y);
case T_FLOAT:
return DBL2NUM((double)FIX2LONG(x) - RFLOAT_VALUE(y));
default:
return rb_num_coerce_bin(x, y, '-');
}
}
|
#- ⇒ Integer
Negates fix
(which might return a Bignum).
2523 2524 2525 2526 2527 |
# File 'numeric.c', line 2523
static VALUE
fix_uminus(VALUE num)
{
return LONG2NUM(-FIX2LONG(num));
}
|
#/(numeric) ⇒ Object
Performs division: the class of the resulting object depends on the class of numeric
and on the magnitude of the result.
2815 2816 2817 2818 2819 |
# File 'numeric.c', line 2815
static VALUE
fix_div(VALUE x, VALUE y)
{
return fix_divide(x, y, '/');
}
|
#<(real) ⇒ Boolean
Returns true
if the value of fix
is less than that of real
.
3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 |
# File 'numeric.c', line 3116
static VALUE
fix_lt(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
if (FIX2LONG(x) < FIX2LONG(y)) return Qtrue;
return Qfalse;
}
switch (TYPE(y)) {
case T_BIGNUM:
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) < 0 ? Qtrue : Qfalse;
case T_FLOAT:
return rb_integer_float_cmp(x, y) == INT2FIX(-1) ? Qtrue : Qfalse;
default:
return rb_num_coerce_relop(x, y, '<');
}
}
|
#<<(count) ⇒ Integer
Shifts fix left count positions (right if count is negative).
3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 |
# File 'numeric.c', line 3278
static VALUE
rb_fix_lshift(VALUE x, VALUE y)
{
long val, width;
val = NUM2LONG(x);
if (!FIXNUM_P(y))
return rb_big_lshift(rb_int2big(val), y);
width = FIX2LONG(y);
if (width < 0)
return fix_rshift(val, (unsigned long)-width);
return fix_lshift(val, width);
}
|
#<=(real) ⇒ Boolean
Returns true
if the value of fix
is less than or equal to that of real
.
3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 |
# File 'numeric.c', line 3141
static VALUE
fix_le(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
if (FIX2LONG(x) <= FIX2LONG(y)) return Qtrue;
return Qfalse;
}
switch (TYPE(y)) {
case T_BIGNUM:
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) <= 0 ? Qtrue : Qfalse;
case T_FLOAT:
{
VALUE rel = rb_integer_float_cmp(x, y);
return rel == INT2FIX(-1) || rel == INT2FIX(0) ? Qtrue : Qfalse;
}
default:
return rb_num_coerce_relop(x, y, rb_intern("<="));
}
}
|
#<=>(numeric) ⇒ -1, ...
Comparison---Returns -1, 0, +1 or nil depending on whether fix is less than, equal to, or greater than numeric. This is the basis for the tests in Comparable
.
3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 |
# File 'numeric.c', line 3037
static VALUE
fix_cmp(VALUE x, VALUE y)
{
if (x == y) return INT2FIX(0);
if (FIXNUM_P(y)) {
if (FIX2LONG(x) > FIX2LONG(y)) return INT2FIX(1);
return INT2FIX(-1);
}
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_cmp(rb_int2big(FIX2LONG(x)), y);
case T_FLOAT:
return rb_integer_float_cmp(x, y);
default:
return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
}
}
|
#==(other) ⇒ Boolean
Return true
if fix
equals other
numerically.
1 == 2 #=> false
1 == 1.0 #=> true
3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 |
# File 'numeric.c', line 3012
static VALUE
fix_equal(VALUE x, VALUE y)
{
if (x == y) return Qtrue;
if (FIXNUM_P(y)) return Qfalse;
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_eq(y, x);
case T_FLOAT:
return rb_integer_float_eq(x, y);
default:
return num_equal(x, y);
}
}
|
#==(other) ⇒ Boolean
Return true
if fix
equals other
numerically.
1 == 2 #=> false
1 == 1.0 #=> true
3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 |
# File 'numeric.c', line 3012
static VALUE
fix_equal(VALUE x, VALUE y)
{
if (x == y) return Qtrue;
if (FIXNUM_P(y)) return Qfalse;
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_eq(y, x);
case T_FLOAT:
return rb_integer_float_eq(x, y);
default:
return num_equal(x, y);
}
}
|
#>(real) ⇒ Boolean
Returns true
if the value of fix
is greater than that of real
.
3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 |
# File 'numeric.c', line 3063
static VALUE
fix_gt(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
if (FIX2LONG(x) > FIX2LONG(y)) return Qtrue;
return Qfalse;
}
switch (TYPE(y)) {
case T_BIGNUM:
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) > 0 ? Qtrue : Qfalse;
case T_FLOAT:
return rb_integer_float_cmp(x, y) == INT2FIX(1) ? Qtrue : Qfalse;
default:
return rb_num_coerce_relop(x, y, '>');
}
}
|
#>=(real) ⇒ Boolean
Returns true
if the value of fix
is greater than or equal to that of real
.
3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 |
# File 'numeric.c', line 3088
static VALUE
fix_ge(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
if (FIX2LONG(x) >= FIX2LONG(y)) return Qtrue;
return Qfalse;
}
switch (TYPE(y)) {
case T_BIGNUM:
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) >= 0 ? Qtrue : Qfalse;
case T_FLOAT:
{
VALUE rel = rb_integer_float_cmp(x, y);
return rel == INT2FIX(1) || rel == INT2FIX(0) ? Qtrue : Qfalse;
}
default:
return rb_num_coerce_relop(x, y, rb_intern(">="));
}
}
|
#>>(count) ⇒ Integer
Shifts fix right count positions (left if count is negative).
3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 |
# File 'numeric.c', line 3310
static VALUE
rb_fix_rshift(VALUE x, VALUE y)
{
long i, val;
val = FIX2LONG(x);
if (!FIXNUM_P(y))
return rb_big_rshift(rb_int2big(val), y);
i = FIX2LONG(y);
if (i == 0) return x;
if (i < 0)
return fix_lshift(val, (unsigned long)-i);
return fix_rshift(val, i);
}
|
#[](n) ⇒ 0, 1
Bit Reference---Returns the nth bit in the binary representation of fix, where fix[0] is the least significant bit.
a = 0b11001100101010
30.downto(0) do |n| print a[n] end
produces:
0000000000000000011001100101010
3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 |
# File 'numeric.c', line 3352
static VALUE
fix_aref(VALUE fix, VALUE idx)
{
long val = FIX2LONG(fix);
long i;
idx = rb_to_int(idx);
if (!FIXNUM_P(idx)) {
idx = rb_big_norm(idx);
if (!FIXNUM_P(idx)) {
if (!RBIGNUM_SIGN(idx) || val >= 0)
return INT2FIX(0);
return INT2FIX(1);
}
}
i = FIX2LONG(idx);
if (i < 0) return INT2FIX(0);
if (SIZEOF_LONG*CHAR_BIT-1 < i) {
if (val < 0) return INT2FIX(1);
return INT2FIX(0);
}
if (val & (1L<<i))
return INT2FIX(1);
return INT2FIX(0);
}
|
#^(integer) ⇒ Object
Bitwise EXCLUSIVE OR.
3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 |
# File 'numeric.c', line 3252
static VALUE
fix_xor(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long val = FIX2LONG(x) ^ FIX2LONG(y);
return LONG2NUM(val);
}
if (RB_TYPE_P(y, T_BIGNUM)) {
return rb_big_xor(y, x);
}
bit_coerce(&x, &y, TRUE);
return rb_funcall(x, rb_intern("^"), 1, y);
}
|
#abs ⇒ Integer #magnitude ⇒ Integer
Returns the absolute value of fix.
-12345.abs #=> 12345
12345.abs #=> 12345
3409 3410 3411 3412 3413 3414 3415 3416 3417 |
# File 'numeric.c', line 3409
static VALUE
fix_abs(VALUE fix)
{
long i = FIX2LONG(fix);
if (i < 0) i = -i;
return LONG2NUM(i);
}
|
#div(numeric) ⇒ Integer
Performs integer division: returns integer value.
2828 2829 2830 2831 2832 |
# File 'numeric.c', line 2828
static VALUE
fix_idiv(VALUE x, VALUE y)
{
return fix_divide(x, y, rb_intern("div"));
}
|
#divmod(numeric) ⇒ Array
See Numeric#divmod
.
2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 |
# File 'numeric.c', line 2869
static VALUE
fix_divmod(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long div, mod;
fixdivmod(FIX2LONG(x), FIX2LONG(y), &div, &mod);
return rb_assoc_new(LONG2NUM(div), LONG2NUM(mod));
}
switch (TYPE(y)) {
case T_BIGNUM:
x = rb_int2big(FIX2LONG(x));
return rb_big_divmod(x, y);
case T_FLOAT:
{
double div, mod;
volatile VALUE a, b;
flodivmod((double)FIX2LONG(x), RFLOAT_VALUE(y), &div, &mod);
a = dbl2ival(div);
b = DBL2NUM(mod);
return rb_assoc_new(a, b);
}
default:
return rb_num_coerce_bin(x, y, rb_intern("divmod"));
}
}
|
#even? ⇒ Boolean
Returns true
if fix is an even number.
3661 3662 3663 3664 3665 3666 3667 3668 |
# File 'numeric.c', line 3661
static VALUE
fix_even_p(VALUE num)
{
if (num & 2) {
return Qfalse;
}
return Qtrue;
}
|
#fdiv(numeric) ⇒ Float
Returns the floating point result of dividing fix by numeric.
654321.fdiv(13731) #=> 47.6528293642124
654321.fdiv(13731.24) #=> 47.6519964693647
2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 |
# File 'numeric.c', line 2754
static VALUE
fix_fdiv(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
return DBL2NUM((double)FIX2LONG(x) / (double)FIX2LONG(y));
}
switch (TYPE(y)) {
case T_BIGNUM:
return rb_big_fdiv(rb_int2big(FIX2LONG(x)), y);
case T_FLOAT:
return DBL2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y));
default:
return rb_num_coerce_bin(x, y, rb_intern("fdiv"));
}
}
|
#abs ⇒ Integer #magnitude ⇒ Integer
Returns the absolute value of fix.
-12345.abs #=> 12345
12345.abs #=> 12345
3409 3410 3411 3412 3413 3414 3415 3416 3417 |
# File 'numeric.c', line 3409
static VALUE
fix_abs(VALUE fix)
{
long i = FIX2LONG(fix);
if (i < 0) i = -i;
return LONG2NUM(i);
}
|
#%(other) ⇒ Object #modulo(other) ⇒ Object
Returns fix
modulo other
. See numeric.divmod
for more information.
2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 |
# File 'numeric.c', line 2843
static VALUE
fix_mod(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long mod;
fixdivmod(FIX2LONG(x), FIX2LONG(y), 0, &mod);
return LONG2NUM(mod);
}
switch (TYPE(y)) {
case T_BIGNUM:
x = rb_int2big(FIX2LONG(x));
return rb_big_modulo(x, y);
case T_FLOAT:
return DBL2NUM(ruby_float_mod((double)FIX2LONG(x), RFLOAT_VALUE(y)));
default:
return rb_num_coerce_bin(x, y, '%');
}
}
|
#odd? ⇒ Boolean
Returns true
if fix is an odd number.
3645 3646 3647 3648 3649 3650 3651 3652 |
# File 'numeric.c', line 3645
static VALUE
fix_odd_p(VALUE num)
{
if (num & 2) {
return Qtrue;
}
return Qfalse;
}
|
#size ⇒ Fixnum
Returns the number of bytes in the machine representation of a Fixnum
.
1.size #=> 4
-1.size #=> 4
2147483647.size #=> 4
3433 3434 3435 3436 3437 |
# File 'numeric.c', line 3433
static VALUE
fix_size(VALUE fix)
{
return INT2FIX(sizeof(long));
}
|
#next ⇒ Integer #succ ⇒ Integer
Returns the Integer
equal to int + 1.
1.next #=> 2
(-1).next #=> 0
2352 2353 2354 2355 2356 2357 |
# File 'numeric.c', line 2352
static VALUE
fix_succ(VALUE num)
{
long i = FIX2LONG(num) + 1;
return LONG2NUM(i);
}
|
#to_f ⇒ Float
Converts fix to a Float
.
3387 3388 3389 3390 3391 3392 3393 3394 3395 |
# File 'numeric.c', line 3387
static VALUE
fix_to_f(VALUE num)
{
double val;
val = (double)FIX2LONG(num);
return DBL2NUM(val);
}
|
#to_s(base = 10) ⇒ String Also known as: inspect
Returns a string containing the representation of fix radix base (between 2 and 36).
12345.to_s #=> "12345"
12345.to_s(2) #=> "11000000111001"
12345.to_s(8) #=> "30071"
12345.to_s(10) #=> "12345"
12345.to_s(16) #=> "3039"
12345.to_s(36) #=> "9ix"
2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 |
# File 'numeric.c', line 2573
static VALUE
fix_to_s(int argc, VALUE *argv, VALUE x)
{
int base;
if (argc == 0) base = 10;
else {
VALUE b;
rb_scan_args(argc, argv, "01", &b);
base = NUM2INT(b);
}
return rb_fix2str(x, base);
}
|
#zero? ⇒ Boolean
Returns true
if fix is zero.
3629 3630 3631 3632 3633 3634 3635 3636 |
# File 'numeric.c', line 3629
static VALUE
fix_zero_p(VALUE num)
{
if (FIX2LONG(num) == 0) {
return Qtrue;
}
return Qfalse;
}
|
#|(integer) ⇒ Object
Bitwise OR.
3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 |
# File 'numeric.c', line 3229
static VALUE
fix_or(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
long val = FIX2LONG(x) | FIX2LONG(y);
return LONG2NUM(val);
}
if (RB_TYPE_P(y, T_BIGNUM)) {
return rb_big_or(y, x);
}
bit_coerce(&x, &y, TRUE);
return rb_funcall(x, rb_intern("|"), 1, y);
}
|
#~ ⇒ Integer
One's complement: returns a number where each bit is flipped.
3168 3169 3170 3171 3172 |
# File 'numeric.c', line 3168
static VALUE
fix_rev(VALUE num)
{
return ~num | FIXNUM_FLAG;
}
|