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 <i>fix</i>.
*
* -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);
}

--
Posted via http://www.ruby-forum.com/.

Haoqi Haoqi 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.

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

···

ruby source file(numeric.c):
/*
* call-seq:
* fix.abs -> aFixnum
*
* Returns the absolute value of <i>fix</i>.
*
* -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);
}

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Joel VanderWerf wrote:

Haoqi Haoqi 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.

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

Thank you~

···

--
Posted via http://www.ruby-forum.com/\.