LONG2NUM vs LONG2FIX

what’s the difference about “LONG2NUM and LONG2FIX” in ruby c api?
why not “return LONG2FIX after FIX2LONG”??
thanks.

ruby source file(numeric.c):
/*

  • call-seq:
  • fix.abs -> aFixnum
    
  • Returns the absolute value of fix.
  • -12345.abs   #=> 12345
    
  • 12345.abs    #=> 12345
    

*/

static VALUE
fix_abs(fix)
VALUE fix;
{
long i = FIX2LONG(fix);

if (i < 0) i = -i;

return LONG2NUM(i);

}

Haoqi H. wrote:

what’s the difference about “LONG2NUM and LONG2FIX” in ruby c api?

LONG2FIX will truncate into a Fixnum (a 31 bit signed integer). LONG2NUM
will convert to Bignum (arbitrary precision integer) if necessary.

why not “return LONG2FIX after FIX2LONG”??
thanks.

(-230).class # => Fixnum
(2
30).class # => Bignum
(-2**30).abs.class # => Bignum

Joel VanderWerf wrote:

Haoqi H. wrote:

what’s the difference about “LONG2NUM and LONG2FIX” in ruby c api?

LONG2FIX will truncate into a Fixnum (a 31 bit signed integer). LONG2NUM
will convert to Bignum (arbitrary precision integer) if necessary.

why not “return LONG2FIX after FIX2LONG”??
thanks.

(-230).class # => Fixnum
(2
30).class # => Bignum
(-2**30).abs.class # => Bignum

Thank you~