rational.c File Reference

#include "ruby.h"
#include "internal.h"
#include <math.h>
#include <float.h>
#include <assert.h>
#include <ctype.h>

Go to the source code of this file.

Defines

#define NDEBUG
#define ZERO   INT2FIX(0)
#define ONE   INT2FIX(1)
#define TWO   INT2FIX(2)
#define GMP_GCD_DIGITS   1
#define f_boolcast(x)   ((x) ? Qtrue : Qfalse)
#define f_inspect   rb_inspect
#define f_to_s   rb_obj_as_string
#define binop(n, op)
#define fun1(n)
#define fun2(n)
#define f_expt10(x)   f_expt(INT2FIX(10), x)
#define f_positive_p(x)   (!f_negative_p(x))
#define f_nonzero_p(x)   (!f_zero_p(x))
#define k_exact_p(x)   (!k_float_p(x))
#define k_inexact_p(x)   k_float_p(x)
#define k_exact_zero_p(x)   (k_exact_p(x) && f_zero_p(x))
#define k_exact_one_p(x)   (k_exact_p(x) && f_one_p(x))
#define get_dat1(x)
#define get_dat2(x, y)
#define rb_raise_zerodiv()   rb_raise(rb_eZeroDivError, "divided by 0")
#define id_ceil   rb_intern("ceil")
#define f_ceil(x)   rb_funcall((x), id_ceil, 0)
#define id_quo   rb_intern("quo")
#define f_quo(x, y)   rb_funcall((x), id_quo, 1, (y))
#define f_reciprocal(x)   f_quo(ONE, (x))
#define id_numerator   rb_intern("numerator")
#define f_numerator(x)   rb_funcall((x), id_numerator, 0)
#define id_denominator   rb_intern("denominator")
#define f_denominator(x)   rb_funcall((x), id_denominator, 0)
#define id_to_r   rb_intern("to_r")
#define f_to_r(x)   rb_funcall((x), id_to_r, 0)
#define id_lshift   rb_intern("<<")
#define f_lshift(x, n)   rb_funcall((x), id_lshift, 1, (n))
#define rb_intern(str)   rb_intern_const(str)

Functions

static VALUE f_add (VALUE x, VALUE y)
static VALUE f_cmp (VALUE x, VALUE y)
static VALUE f_div (VALUE x, VALUE y)
static VALUE f_lt_p (VALUE x, VALUE y)
 binop (mod, '%')
static VALUE f_sub (VALUE x, VALUE y)
 fun1 (abs)
static VALUE f_to_f (VALUE x)
static VALUE f_eqeq_p (VALUE x, VALUE y)
 fun2 (expt)
static VALUE f_zero_p (VALUE x)
static VALUE f_one_p (VALUE x)
static VALUE f_minus_one_p (VALUE x)
static VALUE f_kind_of_p (VALUE x, VALUE c)
static VALUE k_numeric_p (VALUE x)
static VALUE k_integer_p (VALUE x)
static VALUE k_float_p (VALUE x)
static VALUE k_rational_p (VALUE x)
static long i_gcd (long x, long y)
static VALUE f_gcd_normal (VALUE x, VALUE y)
VALUE rb_gcd_normal (VALUE x, VALUE y)
static VALUE f_gcd (VALUE x, VALUE y)
static VALUE f_lcm (VALUE x, VALUE y)
static VALUE nurat_s_new_internal (VALUE klass, VALUE num, VALUE den)
static VALUE nurat_s_alloc (VALUE klass)
static VALUE f_rational_new_bang1 (VALUE klass, VALUE x)
static void nurat_int_check (VALUE num)
static VALUE nurat_int_value (VALUE num)
static VALUE nurat_s_canonicalize_internal (VALUE klass, VALUE num, VALUE den)
static VALUE nurat_s_canonicalize_internal_no_reduce (VALUE klass, VALUE num, VALUE den)
static VALUE nurat_s_new (int argc, VALUE *argv, VALUE klass)
static VALUE f_rational_new2 (VALUE klass, VALUE x, VALUE y)
static VALUE f_rational_new_no_reduce2 (VALUE klass, VALUE x, VALUE y)
static VALUE nurat_f_rational (int argc, VALUE *argv, VALUE klass)
static VALUE nurat_numerator (VALUE self)
static VALUE nurat_denominator (VALUE self)
static VALUE f_imul (long a, long b)
static VALUE f_addsub (VALUE self, VALUE anum, VALUE aden, VALUE bnum, VALUE bden, int k)
static VALUE nurat_add (VALUE self, VALUE other)
static VALUE nurat_sub (VALUE self, VALUE other)
static VALUE f_muldiv (VALUE self, VALUE anum, VALUE aden, VALUE bnum, VALUE bden, int k)
static VALUE nurat_mul (VALUE self, VALUE other)
static VALUE nurat_div (VALUE self, VALUE other)
static VALUE nurat_fdiv (VALUE self, VALUE other)
static VALUE f_odd_p (VALUE integer)
static VALUE nurat_expt (VALUE self, VALUE other)
static VALUE nurat_cmp (VALUE self, VALUE other)
static VALUE nurat_eqeq_p (VALUE self, VALUE other)
static VALUE nurat_coerce (VALUE self, VALUE other)
static VALUE nurat_floor (VALUE self)
static VALUE nurat_ceil (VALUE self)
static VALUE nurat_truncate (VALUE self)
static VALUE nurat_round (VALUE self)
static VALUE f_round_common (int argc, VALUE *argv, VALUE self, VALUE(*func)(VALUE))
static VALUE nurat_floor_n (int argc, VALUE *argv, VALUE self)
static VALUE nurat_ceil_n (int argc, VALUE *argv, VALUE self)
static VALUE nurat_truncate_n (int argc, VALUE *argv, VALUE self)
static VALUE nurat_round_n (int argc, VALUE *argv, VALUE self)
static VALUE nurat_to_f (VALUE self)
static VALUE nurat_to_r (VALUE self)
static void nurat_rationalize_internal (VALUE a, VALUE b, VALUE *p, VALUE *q)
static VALUE nurat_rationalize (int argc, VALUE *argv, VALUE self)
static VALUE nurat_hash (VALUE self)
static VALUE f_format (VALUE self, VALUE(*func)(VALUE))
static VALUE nurat_to_s (VALUE self)
static VALUE nurat_inspect (VALUE self)
static VALUE nurat_dumper (VALUE self)
static VALUE nurat_loader (VALUE self, VALUE a)
static VALUE nurat_marshal_dump (VALUE self)
static VALUE nurat_marshal_load (VALUE self, VALUE a)
VALUE rb_rational_reciprocal (VALUE x)
VALUE rb_gcd (VALUE self, VALUE other)
VALUE rb_lcm (VALUE self, VALUE other)
VALUE rb_gcdlcm (VALUE self, VALUE other)
VALUE rb_rational_raw (VALUE x, VALUE y)
VALUE rb_rational_new (VALUE x, VALUE y)
static VALUE nurat_s_convert (int argc, VALUE *argv, VALUE klass)
VALUE rb_Rational (VALUE x, VALUE y)
static VALUE numeric_numerator (VALUE self)
static VALUE numeric_denominator (VALUE self)
static VALUE numeric_quo (VALUE x, VALUE y)
static VALUE integer_numerator (VALUE self)
static VALUE integer_denominator (VALUE self)
static VALUE float_numerator (VALUE self)
static VALUE float_denominator (VALUE self)
static VALUE nilclass_to_r (VALUE self)
static VALUE nilclass_rationalize (int argc, VALUE *argv, VALUE self)
static VALUE integer_to_r (VALUE self)
static VALUE integer_rationalize (int argc, VALUE *argv, VALUE self)
static void float_decode_internal (VALUE self, VALUE *rf, VALUE *rn)
static VALUE float_to_r (VALUE self)
VALUE rb_flt_rationalize_with_prec (VALUE flt, VALUE prec)
VALUE rb_flt_rationalize (VALUE flt)
static VALUE float_rationalize (int argc, VALUE *argv, VALUE self)
static int issign (int c)
static int read_sign (const char **s)
static int isdecimal (int c)
static int read_digits (const char **s, int strict, VALUE *num, int *count)
static int islettere (int c)
static int read_num (const char **s, int numsign, int strict, VALUE *num)
static int read_den (const char **s, int strict, VALUE *num)
static int read_rat_nos (const char **s, int sign, int strict, VALUE *num)
static int read_rat (const char **s, int strict, VALUE *num)
static void skip_ws (const char **s)
static int parse_rat (const char *s, int strict, VALUE *num)
static VALUE string_to_r_strict (VALUE self)
static VALUE string_to_r (VALUE self)
VALUE rb_cstr_to_rat (const char *s, int strict)
void Init_Rational (void)

Variables

VALUE rb_cRational
static ID id_abs
static ID id_cmp
static ID id_convert
static ID id_eqeq_p
static ID id_expt
static ID id_fdiv
static ID id_idiv
static ID id_integer_p
static ID id_negate
static ID id_to_f
static ID id_to_i
static ID id_truncate
static ID id_i_num
static ID id_i_den


Define Documentation

#define binop ( n,
op   ) 

Value:

inline static VALUE \
f_##n(VALUE x, VALUE y)\
{\
  return rb_funcall(x, (op), 1, y);\
}

Definition at line 41 of file rational.c.

#define f_boolcast (  )     ((x) ? Qtrue : Qfalse)

Definition at line 37 of file rational.c.

#define f_ceil (  )     rb_funcall((x), id_ceil, 0)

Definition at line 1442 of file rational.c.

#define f_denominator (  )     rb_funcall((x), id_denominator, 0)

Definition at line 1780 of file rational.c.

Referenced by nucomp_denominator(), nucomp_expt(), nucomp_numerator(), and numeric_denominator().

#define f_expt10 (  )     f_expt(INT2FIX(10), x)

Referenced by f_round_common(), and read_num().

#define f_inspect   rb_inspect

Definition at line 38 of file rational.c.

#define f_lshift ( x,
 )     rb_funcall((x), id_lshift, 1, (n))

Definition at line 1979 of file rational.c.

Referenced by float_to_r(), and rb_flt_rationalize().

#define f_nonzero_p (  )     (!f_zero_p(x))

Definition at line 196 of file rational.c.

#define f_numerator (  )     rb_funcall((x), id_numerator, 0)

Definition at line 1777 of file rational.c.

Referenced by nucomp_expt(), nucomp_numerator(), and numeric_numerator().

#define f_positive_p (  )     (!f_negative_p(x))

Definition at line 177 of file rational.c.

#define f_quo ( x,
 )     rb_funcall((x), id_quo, 1, (y))

Definition at line 1445 of file rational.c.

#define f_reciprocal (  )     f_quo(ONE, (x))

Definition at line 1447 of file rational.c.

Referenced by nucomp_expt(), and nurat_rationalize_internal().

#define f_to_r (  )     rb_funcall((x), id_to_r, 0)

Definition at line 1783 of file rational.c.

#define f_to_s   rb_obj_as_string

Definition at line 39 of file rational.c.

#define fun1 (  ) 

Value:

inline static VALUE \
f_##n(VALUE x)\
{\
    return rb_funcall(x, id_##n, 0);\
}

Definition at line 48 of file rational.c.

#define fun2 (  ) 

Value:

inline static VALUE \
f_##n(VALUE x, VALUE y)\
{\
    return rb_funcall(x, id_##n, 1, y);\
}

Definition at line 55 of file rational.c.

#define get_dat1 (  ) 

Value:

struct RRational *dat;\
    dat = ((struct RRational *)(x))

Definition at line 398 of file rational.c.

#define get_dat2 ( x,
 ) 

Value:

struct RRational *adat, *bdat;\
    adat = ((struct RRational *)(x));\
    bdat = ((struct RRational *)(y))

Definition at line 402 of file rational.c.

#define GMP_GCD_DIGITS   1

Definition at line 29 of file rational.c.

Referenced by f_gcd().

#define id_ceil   rb_intern("ceil")

Definition at line 1441 of file rational.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

#define id_denominator   rb_intern("denominator")

Definition at line 1779 of file rational.c.

Referenced by Init_Complex().

#define id_lshift   rb_intern("<<")

Definition at line 1978 of file rational.c.

#define id_numerator   rb_intern("numerator")

Definition at line 1776 of file rational.c.

Referenced by Init_Complex().

#define id_quo   rb_intern("quo")

Definition at line 1444 of file rational.c.

Referenced by Init_Complex(), Init_Time(), nucomp_div(), quo(), and wquo().

#define id_to_r   rb_intern("to_r")

Definition at line 1782 of file rational.c.

Referenced by GetVpValueWithPrec(), Init_bigdecimal(), and Init_Complex().

#define k_exact_one_p (  )     (k_exact_p(x) && f_one_p(x))

Definition at line 270 of file rational.c.

#define k_exact_p (  )     (!k_float_p(x))

Definition at line 266 of file rational.c.

#define k_exact_zero_p (  )     (k_exact_p(x) && f_zero_p(x))

Definition at line 269 of file rational.c.

#define k_inexact_p (  )     k_float_p(x)

Definition at line 267 of file rational.c.

#define NDEBUG

Definition at line 17 of file rational.c.

#define ONE   INT2FIX(1)

Definition at line 26 of file rational.c.

#define rb_intern ( str   )     rb_intern_const(str)

 
#define rb_raise_zerodiv (  )     rb_raise(rb_eZeroDivError, "divided by 0")

Definition at line 424 of file rational.c.

#define TWO   INT2FIX(2)

Definition at line 27 of file rational.c.

#define ZERO   INT2FIX(0)

Definition at line 25 of file rational.c.


Function Documentation

binop ( mod  ,
'%'   
)

Definition at line 102 of file rational.c.

References FIX2LONG, FIXNUM_P, rb_funcall(), RB_TYPE_P, T_BIGNUM, and ZERO.

static VALUE f_add ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 63 of file rational.c.

References FIX2LONG, FIXNUM_P, and rb_funcall().

static VALUE f_addsub ( VALUE  self,
VALUE  anum,
VALUE  aden,
VALUE  bnum,
VALUE  bden,
int  k 
) [inline, static]

Definition at line 683 of file rational.c.

References CLASS_OF, f_add, f_gcd(), f_idiv, f_imul(), f_mul, f_rational_new_no_reduce2(), f_sub, FIX2LONG, FIXNUM_P, i_gcd(), LONG2NUM, and VALUE.

static VALUE f_cmp ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 73 of file rational.c.

References FIX2LONG, FIXNUM_P, id_cmp, INT2FIX, and rb_funcall().

static VALUE f_div ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 87 of file rational.c.

References FIX2LONG, FIXNUM_P, and rb_funcall().

static VALUE f_eqeq_p ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 156 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, id_eqeq_p, and rb_funcall().

static VALUE f_format ( VALUE  self,
VALUE(*)(VALUE)  func 
) [static]

Definition at line 1591 of file rational.c.

References get_dat1, rb_str_cat2(), and rb_str_concat().

static VALUE f_gcd ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 362 of file rational.c.

References f_gcd_normal(), GMP_GCD_DIGITS, RB_TYPE_P, RBIGNUM_LEN, and T_BIGNUM.

Referenced by f_addsub(), f_lcm(), f_muldiv(), nurat_s_canonicalize_internal(), rb_gcd(), and rb_gcdlcm().

static VALUE f_gcd_normal ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 324 of file rational.c.

References f_mod, f_negate, f_negative_p(), f_zero_p(), FIX2LONG, FIXNUM_P, i_gcd(), LONG2NUM, and VALUE.

Referenced by f_gcd(), and rb_gcd_normal().

static VALUE f_imul ( long  a,
long  b 
) [inline, static]

Definition at line 652 of file rational.c.

References LONG2NUM, MUL_OVERFLOW_LONG_P, rb_big_mul(), rb_int2big(), VALUE, and ZERO.

Referenced by f_addsub(), f_muldiv(), and nurat_cmp().

static VALUE f_kind_of_p ( VALUE  x,
VALUE  c 
) [inline, static]

Definition at line 237 of file rational.c.

References rb_obj_is_kind_of().

static VALUE f_lcm ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 391 of file rational.c.

References f_abs, f_div, f_gcd(), f_mul, f_zero_p(), and ZERO.

Referenced by rb_gcdlcm(), and rb_lcm().

static VALUE f_lt_p ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 95 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, and rb_funcall().

static VALUE f_minus_one_p ( VALUE  x  )  [inline, static]

Definition at line 218 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, id_eqeq_p, INT2FIX, Qfalse, rb_funcall(), RB_TYPE_P, RRATIONAL, T_BIGNUM, T_FIXNUM, T_RATIONAL, and VALUE.

Referenced by nurat_expt().

static VALUE f_muldiv ( VALUE  self,
VALUE  anum,
VALUE  aden,
VALUE  bnum,
VALUE  bden,
int  k 
) [inline, static]

Definition at line 814 of file rational.c.

References CLASS_OF, f_gcd(), f_idiv, f_imul(), f_mul, f_negate, f_negative_p(), f_rational_new_no_reduce2(), FIX2LONG, FIXNUM_P, i_gcd(), and VALUE.

Referenced by nurat_div(), and nurat_mul().

static VALUE f_odd_p ( VALUE  integer  )  [inline, static]

Definition at line 961 of file rational.c.

References INT2FIX, Qfalse, Qtrue, and rb_funcall().

Referenced by nurat_expt().

static VALUE f_one_p ( VALUE  x  )  [inline, static]

Definition at line 199 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, id_eqeq_p, ONE, Qfalse, rb_funcall(), RB_TYPE_P, RRATIONAL, T_BIGNUM, T_FIXNUM, T_RATIONAL, and VALUE.

static VALUE f_rational_new2 ( VALUE  klass,
VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 564 of file rational.c.

References assert, k_rational_p(), and nurat_s_canonicalize_internal().

Referenced by nurat_expt(), and nurat_rationalize().

static VALUE f_rational_new_bang1 ( VALUE  klass,
VALUE  x 
) [inline, static]

Definition at line 461 of file rational.c.

References nurat_s_new_internal(), and ONE.

Referenced by f_round_common(), nurat_cmp(), nurat_coerce(), and nurat_expt().

static VALUE f_rational_new_no_reduce2 ( VALUE  klass,
VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 572 of file rational.c.

References assert, k_rational_p(), and nurat_s_canonicalize_internal_no_reduce().

Referenced by f_addsub(), f_muldiv(), nurat_div(), and rb_rational_reciprocal().

static VALUE f_round_common ( int  argc,
VALUE *  argv,
VALUE  self,
VALUE(*)(VALUE)  func 
) [static]

Definition at line 1276 of file rational.c.

References CLASS_OF, f_div, f_expt10, f_lt_p, f_mul, f_rational_new_bang1(), f_to_i, k_float_p(), k_integer_p(), k_rational_p(), ONE, rb_eTypeError, rb_raise(), rb_scan_args(), and ZERO.

Referenced by nurat_ceil_n(), nurat_floor_n(), nurat_round_n(), and nurat_truncate_n().

static VALUE f_sub ( VALUE  x,
VALUE  y 
) [inline, static]

Definition at line 129 of file rational.c.

References FIX2LONG, FIXNUM_P, and rb_funcall().

static VALUE f_to_f ( VALUE  x  )  [inline, static]

Definition at line 148 of file rational.c.

References DBL2NUM, id_to_f, rb_funcall(), rb_str_to_dbl(), RB_TYPE_P, and T_STRING.

static VALUE f_zero_p ( VALUE  x  )  [inline, static]

Definition at line 180 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, id_eqeq_p, Qfalse, rb_funcall(), RB_TYPE_P, RRATIONAL, T_BIGNUM, T_FIXNUM, T_RATIONAL, VALUE, and ZERO.

static void float_decode_internal ( VALUE  self,
VALUE *  rf,
VALUE *  rn 
) [static]

Definition at line 1955 of file rational.c.

References DBL_MANT_DIG, f, INT2FIX, rb_dbl2big(), and RFLOAT_VALUE.

Referenced by float_to_r(), and rb_flt_rationalize().

static VALUE float_denominator ( VALUE  self  )  [static]

Definition at line 1891 of file rational.c.

References INT2FIX, isinf(), isnan, rb_call_super(), and RFLOAT_VALUE.

Referenced by Init_Rational().

static VALUE float_numerator ( VALUE  self  )  [static]

Definition at line 1873 of file rational.c.

References isinf(), isnan, rb_call_super(), and RFLOAT_VALUE.

Referenced by Init_Rational().

static VALUE float_rationalize ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 2088 of file rational.c.

References f_abs, f_negate, f_negative_p(), rb_flt_rationalize(), rb_flt_rationalize_with_prec(), rb_scan_args(), and VALUE.

Referenced by Init_Rational().

static VALUE float_to_r ( VALUE  self  )  [static]

Definition at line 1998 of file rational.c.

References f, f_expt, f_lshift, f_mul, f_to_r, FIX2LONG, float_decode_internal(), FLT_RADIX, INT2FIX, ONE, rb_rational_new2, and VALUE.

Referenced by Init_Rational().

fun1 ( abs   ) 

Definition at line 136 of file rational.c.

References id_to_i, rb_funcall(), rb_str_to_inum(), RB_TYPE_P, and T_STRING.

fun2 ( expt   ) 

Definition at line 163 of file rational.c.

References f_boolcast, FIX2LONG, FIXNUM_P, rb_funcall(), and ZERO.

static long i_gcd ( long  x,
long  y 
) [inline, static]

Definition at line 303 of file rational.c.

Referenced by f_addsub(), f_gcd_normal(), and f_muldiv().

void Init_Rational ( void   ) 

Definition at line 2488 of file rational.c.

References assert, CLASS_OF, float_denominator(), float_numerator(), float_rationalize(), float_to_r(), id_abs, id_cmp, id_convert, id_eqeq_p, id_expt, id_fdiv, id_i_den, id_i_num, id_idiv, id_integer_p, id_negate, id_to_f, id_to_i, id_truncate, integer_denominator(), integer_numerator(), integer_rationalize(), integer_to_r(), nilclass_rationalize(), nilclass_to_r(), numeric_denominator(), numeric_numerator(), numeric_quo(), nurat_add(), nurat_ceil_n(), nurat_cmp(), nurat_coerce(), nurat_denominator(), nurat_div(), nurat_dumper(), nurat_eqeq_p(), nurat_expt(), nurat_f_rational(), nurat_fdiv(), nurat_floor_n(), nurat_hash(), nurat_inspect(), nurat_loader(), nurat_marshal_dump(), nurat_marshal_load(), nurat_mul(), nurat_numerator(), nurat_rationalize(), nurat_round_n(), nurat_s_alloc(), nurat_s_convert(), nurat_s_new(), nurat_sub(), nurat_to_f(), nurat_to_r(), nurat_to_s(), nurat_truncate(), nurat_truncate_n(), rb_cFloat, rb_cInteger, rb_cNilClass, rb_cNumeric, rb_cObject, rb_cRational, rb_cString, rb_define_alloc_func(), rb_define_class(), rb_define_class_under(), rb_define_global_function(), rb_define_method(), rb_define_private_method(), rb_gcd(), rb_gcdlcm(), rb_intern, rb_lcm(), rb_marshal_define_compat(), rb_undef_method(), string_to_r(), and VALUE.

static VALUE integer_denominator ( VALUE  self  )  [static]

Definition at line 1857 of file rational.c.

References INT2FIX.

Referenced by Init_Rational().

static VALUE integer_numerator ( VALUE  self  )  [static]

Definition at line 1845 of file rational.c.

Referenced by Init_Rational().

static VALUE integer_rationalize ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1948 of file rational.c.

References integer_to_r(), NULL, and rb_scan_args().

Referenced by Init_Rational().

static VALUE integer_to_r ( VALUE  self  )  [static]

Definition at line 1935 of file rational.c.

References rb_rational_new1.

Referenced by Init_Rational(), and integer_rationalize().

static int isdecimal ( int  c  )  [inline, static]

Definition at line 2126 of file rational.c.

static int islettere ( int  c  )  [inline, static]

Definition at line 2176 of file rational.c.

static int issign ( int  c  )  [inline, static]

Definition at line 2108 of file rational.c.

static VALUE k_float_p ( VALUE  x  )  [inline, static]

Definition at line 255 of file rational.c.

References f_kind_of_p(), and rb_cFloat.

static VALUE k_integer_p ( VALUE  x  )  [inline, static]

Definition at line 249 of file rational.c.

References f_kind_of_p(), and rb_cInteger.

Referenced by f_round_common(), nurat_expt(), nurat_int_value(), and nurat_s_convert().

static VALUE k_numeric_p ( VALUE  x  )  [inline, static]

Definition at line 243 of file rational.c.

References f_kind_of_p(), and rb_cNumeric.

static VALUE k_rational_p ( VALUE  x  )  [inline, static]

Definition at line 261 of file rational.c.

References f_kind_of_p(), and rb_cRational.

static VALUE nilclass_rationalize ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1919 of file rational.c.

References nilclass_to_r(), NULL, and rb_scan_args().

Referenced by Init_Rational().

static VALUE nilclass_to_r ( VALUE  self  )  [static]

Definition at line 1906 of file rational.c.

References INT2FIX, and rb_rational_new1.

Referenced by Init_Rational(), and nilclass_rationalize().

static VALUE numeric_denominator ( VALUE  self  )  [static]

Definition at line 1804 of file rational.c.

References f_denominator, and f_to_r.

Referenced by Init_Rational().

static VALUE numeric_numerator ( VALUE  self  )  [static]

Definition at line 1792 of file rational.c.

References f_numerator, and f_to_r.

Referenced by Init_Rational().

static VALUE numeric_quo ( VALUE  x,
VALUE  y 
) [static]

Definition at line 1819 of file rational.c.

References rb_convert_type(), rb_funcall(), rb_rational_raw1, RB_TYPE_P, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_add ( VALUE  self,
VALUE  other 
) [static]

Definition at line 744 of file rational.c.

References f_add, f_addsub(), f_to_f(), get_dat1, get_dat2, ONE, rb_num_coerce_bin(), RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_ceil ( VALUE  self  )  [static]

Definition at line 1221 of file rational.c.

References f_idiv, f_negate, and get_dat1.

Referenced by nurat_ceil_n().

static VALUE nurat_ceil_n ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1354 of file rational.c.

References f_round_common(), and nurat_ceil().

Referenced by Init_Rational().

static VALUE nurat_cmp ( VALUE  self,
VALUE  other 
) [static]

Definition at line 1067 of file rational.c.

References CLASS_OF, f_cmp(), f_imul(), f_mul, f_rational_new_bang1(), f_sub, f_to_f(), FIX2LONG, FIXNUM_P, get_dat1, get_dat2, id_cmp, rb_num_coerce_cmp(), RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, T_RATIONAL, VALUE, and ZERO.

Referenced by Init_Rational().

static VALUE nurat_coerce ( VALUE  self,
VALUE  other 
) [static]

Definition at line 1156 of file rational.c.

References CLASS_OF, f_rational_new_bang1(), f_to_f(), INT2FIX, k_exact_zero_p, Qnil, rb_assoc_new(), rb_Complex(), rb_eTypeError, rb_obj_classname(), rb_raise(), RB_TYPE_P, RCOMPLEX, T_BIGNUM, T_COMPLEX, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_denominator ( VALUE  self  )  [static]

Definition at line 641 of file rational.c.

References get_dat1.

Referenced by Init_Rational().

static VALUE nurat_div ( VALUE  self,
VALUE  other 
) [static]

Definition at line 907 of file rational.c.

References CLASS_OF, f_muldiv(), f_one_p(), f_rational_new_no_reduce2(), f_to_f(), f_zero_p(), get_dat1, get_dat2, ONE, rb_funcall(), rb_num_coerce_bin(), rb_raise_zerodiv, RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_dumper ( VALUE  self  )  [static]

Definition at line 1643 of file rational.c.

Referenced by Init_Rational().

static VALUE nurat_eqeq_p ( VALUE  self,
VALUE  other 
) [static]

Definition at line 1117 of file rational.c.

References f_boolcast, f_eqeq_p(), f_to_f(), f_zero_p(), FIX2LONG, FIXNUM_P, get_dat1, get_dat2, Qfalse, Qtrue, RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_expt ( VALUE  self,
VALUE  other 
) [static]

Definition at line 983 of file rational.c.

References CLASS_OF, f_cmp(), f_expt, f_minus_one_p(), f_negate, f_odd_p(), f_one_p(), f_rational_new2(), f_rational_new_bang1(), f_to_f(), f_zero_p(), FIX2INT, get_dat1, id_expt, INT2FIX, k_exact_p, k_exact_zero_p, k_integer_p(), k_numeric_p(), k_rational_p(), ONE, rb_num_coerce_bin(), rb_raise_zerodiv, RB_TYPE_P, rb_warn(), T_BIGNUM, T_FIXNUM, T_FLOAT, T_RATIONAL, VALUE, and ZERO.

Referenced by Init_Rational().

static VALUE nurat_f_rational ( int  argc,
VALUE *  argv,
VALUE  klass 
) [static]

Definition at line 605 of file rational.c.

References id_convert, rb_cRational, and rb_funcall2.

Referenced by Init_Rational().

static VALUE nurat_fdiv ( VALUE  self,
VALUE  other 
) [static]

Definition at line 953 of file rational.c.

References f_div, f_to_f(), and f_zero_p().

Referenced by Init_Rational().

static VALUE nurat_floor ( VALUE  self  )  [static]

Definition at line 1214 of file rational.c.

References f_idiv, and get_dat1.

Referenced by nurat_floor_n().

static VALUE nurat_floor_n ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1330 of file rational.c.

References f_round_common(), and nurat_floor().

Referenced by Init_Rational().

static VALUE nurat_hash ( VALUE  self  )  [static]

Definition at line 1576 of file rational.c.

References get_dat1, LONG2FIX, NUM2LONG, rb_hash(), rb_memhash(), and VALUE.

Referenced by Init_Rational().

static VALUE nurat_inspect ( VALUE  self  )  [static]

Definition at line 1630 of file rational.c.

References f_format(), f_inspect, rb_str_cat2(), rb_str_concat(), rb_usascii_str_new2, and VALUE.

Referenced by Init_Rational().

static void nurat_int_check ( VALUE  num  )  [inline, static]

Definition at line 481 of file rational.c.

References k_numeric_p(), rb_eTypeError, rb_raise(), RB_TYPE_P, T_BIGNUM, and T_FIXNUM.

Referenced by nurat_int_value().

static VALUE nurat_int_value ( VALUE  num  )  [inline, static]

Definition at line 490 of file rational.c.

References f_to_i, k_integer_p(), and nurat_int_check().

Referenced by nurat_s_new(), rb_gcd(), rb_gcdlcm(), and rb_lcm().

static VALUE nurat_loader ( VALUE  self,
VALUE  a 
) [static]

Definition at line 1650 of file rational.c.

References get_dat1, id_i_den, id_i_num, rb_ivar_get(), RRATIONAL_SET_DEN, and RRATIONAL_SET_NUM.

Referenced by Init_Rational().

static VALUE nurat_marshal_dump ( VALUE  self  )  [static]

Definition at line 1662 of file rational.c.

References get_dat1, rb_assoc_new(), rb_copy_generic_ivar(), and VALUE.

Referenced by Init_Rational().

static VALUE nurat_marshal_load ( VALUE  self,
VALUE  a 
) [static]

Definition at line 1674 of file rational.c.

References Check_Type, f_zero_p(), id_i_den, id_i_num, RARRAY_AREF, RARRAY_LEN, rb_check_frozen, rb_check_trusted, rb_eArgError, rb_ivar_set(), rb_raise(), rb_raise_zerodiv, and T_ARRAY.

Referenced by Init_Rational().

static VALUE nurat_mul ( VALUE  self,
VALUE  other 
) [static]

Definition at line 865 of file rational.c.

References f_mul, f_muldiv(), f_to_f(), get_dat1, get_dat2, ONE, rb_num_coerce_bin(), RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_numerator ( VALUE  self  )  [static]

Definition at line 622 of file rational.c.

References get_dat1.

Referenced by Init_Rational().

static VALUE nurat_rationalize ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1552 of file rational.c.

References CLASS_OF, f_abs, f_add, f_eqeq_p(), f_negate, f_negative_p(), f_rational_new2(), f_sub, nurat_rationalize_internal(), rb_scan_args(), and VALUE.

Referenced by Init_Rational().

static void nurat_rationalize_internal ( VALUE  a,
VALUE  b,
VALUE *  p,
VALUE *  q 
) [static]

Definition at line 1509 of file rational.c.

References f_add, f_ceil, f_lt_p, f_mul, f_reciprocal, f_sub, ONE, VALUE, and ZERO.

Referenced by nurat_rationalize(), rb_flt_rationalize(), and rb_flt_rationalize_with_prec().

static VALUE nurat_round ( VALUE  self  )  [static]

Definition at line 1252 of file rational.c.

References f_add, f_idiv, f_mul, f_negate, f_negative_p(), get_dat1, neg, TWO, and VALUE.

Referenced by nurat_round_n().

static VALUE nurat_round_n ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1403 of file rational.c.

References f_round_common(), and nurat_round().

Referenced by Init_Rational().

static VALUE nurat_s_alloc ( VALUE  klass  )  [static]

Definition at line 419 of file rational.c.

References nurat_s_new_internal(), ONE, and ZERO.

Referenced by Init_Rational().

static VALUE nurat_s_canonicalize_internal ( VALUE  klass,
VALUE  num,
VALUE  den 
) [inline, static]

Definition at line 499 of file rational.c.

References f_cmp(), f_gcd(), f_idiv, f_negate, f_one_p(), FIX2INT, nurat_s_new_internal(), rb_raise_zerodiv, VALUE, and ZERO.

Referenced by f_rational_new2(), nurat_s_new(), and rb_rational_new().

static VALUE nurat_s_canonicalize_internal_no_reduce ( VALUE  klass,
VALUE  num,
VALUE  den 
) [inline, static]

Definition at line 525 of file rational.c.

References f_cmp(), f_negate, f_one_p(), FIX2INT, nurat_s_new_internal(), rb_raise_zerodiv, and ZERO.

Referenced by f_rational_new_no_reduce2().

static VALUE nurat_s_convert ( int  argc,
VALUE *  argv,
VALUE  klass 
) [static]

Definition at line 2386 of file rational.c.

References f_div, f_to_r, k_exact_one_p, k_exact_zero_p, k_integer_p(), k_numeric_p(), NIL_P, nurat_s_new(), rb_backref_get(), rb_backref_set(), rb_convert_type(), rb_eTypeError, rb_match_busy(), rb_raise(), rb_scan_args(), RB_TYPE_P, RCOMPLEX, string_to_r_strict(), T_COMPLEX, T_FLOAT, T_RATIONAL, T_STRING, and VALUE.

Referenced by Init_Rational(), and rb_Rational().

static VALUE nurat_s_new ( int  argc,
VALUE *  argv,
VALUE  klass 
) [static]

Definition at line 545 of file rational.c.

References nurat_int_value(), nurat_s_canonicalize_internal(), ONE, rb_scan_args(), and VALUE.

Referenced by Init_Rational(), and nurat_s_convert().

static VALUE nurat_s_new_internal ( VALUE  klass,
VALUE  num,
VALUE  den 
) [inline, static]

Definition at line 408 of file rational.c.

References FL_WB_PROTECTED, NEWOBJ_OF, RGENGC_WB_PROTECTED_RATIONAL, RRATIONAL_SET_DEN, RRATIONAL_SET_NUM, T_RATIONAL, and VALUE.

Referenced by f_rational_new_bang1(), nurat_s_alloc(), nurat_s_canonicalize_internal(), nurat_s_canonicalize_internal_no_reduce(), and rb_rational_raw().

static VALUE nurat_sub ( VALUE  self,
VALUE  other 
) [static]

Definition at line 785 of file rational.c.

References f_addsub(), f_sub, f_to_f(), get_dat1, get_dat2, ONE, rb_num_coerce_bin(), RB_TYPE_P, T_BIGNUM, T_FIXNUM, T_FLOAT, and T_RATIONAL.

Referenced by Init_Rational().

static VALUE nurat_to_f ( VALUE  self  )  [static]

Definition at line 1420 of file rational.c.

References get_dat1.

Referenced by Init_Rational().

static VALUE nurat_to_r ( VALUE  self  )  [static]

Definition at line 1436 of file rational.c.

Referenced by Init_Rational().

static VALUE nurat_to_s ( VALUE  self  )  [static]

Definition at line 1614 of file rational.c.

References f_format(), and f_to_s.

Referenced by Init_Rational().

static VALUE nurat_truncate ( VALUE  self  )  [static]

Definition at line 1243 of file rational.c.

References f_idiv, f_negate, f_negative_p(), and get_dat1.

Referenced by Init_Rational(), and nurat_truncate_n().

static VALUE nurat_truncate_n ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 1378 of file rational.c.

References f_round_common(), and nurat_truncate().

Referenced by Init_Rational().

static int parse_rat ( const char *  s,
int  strict,
VALUE *  num 
) [static]

Definition at line 2277 of file rational.c.

References read_rat(), and skip_ws().

Referenced by rb_cstr_to_rat(), string_to_r(), and string_to_r_strict().

VALUE rb_cstr_to_rat ( const char *  s,
int  strict 
)

Definition at line 2374 of file rational.c.

References parse_rat(), rb_eFloatDomainError, rb_raise(), RB_TYPE_P, T_FLOAT, and VALUE.

Referenced by str2num().

VALUE rb_flt_rationalize ( VALUE  flt  ) 

Definition at line 2036 of file rational.c.

References f, f_add, f_eqeq_p(), f_expt, f_lshift, f_mul, f_positive_p, f_sub, f_to_r, f_zero_p(), float_decode_internal(), FLT_RADIX, INT2FIX, nurat_rationalize_internal(), ONE, rb_rational_new1, rb_rational_new2, TWO, and VALUE.

Referenced by float_rationalize().

VALUE rb_flt_rationalize_with_prec ( VALUE  flt,
VALUE  prec 
)

Definition at line 2020 of file rational.c.

References f_abs, f_add, f_eqeq_p(), f_sub, f_to_r, nurat_rationalize_internal(), rb_rational_new2, and VALUE.

Referenced by float_rationalize().

VALUE rb_gcd ( VALUE  self,
VALUE  other 
)

Definition at line 1712 of file rational.c.

References f_gcd(), and nurat_int_value().

Referenced by Init_Rational().

VALUE rb_gcd_normal ( VALUE  x,
VALUE  y 
)

Definition at line 356 of file rational.c.

References f_gcd_normal().

VALUE rb_gcdlcm ( VALUE  self,
VALUE  other 
)

Definition at line 1747 of file rational.c.

References f_gcd(), f_lcm(), nurat_int_value(), and rb_assoc_new().

Referenced by Init_Rational().

VALUE rb_lcm ( VALUE  self,
VALUE  other 
)

Definition at line 1730 of file rational.c.

References f_lcm(), and nurat_int_value().

Referenced by Init_Rational(), and nucomp_denominator().

VALUE rb_Rational ( VALUE  x,
VALUE  y 
)

Definition at line 1768 of file rational.c.

References nurat_s_convert(), rb_cRational, and VALUE.

Referenced by BigDecimal_to_r().

VALUE rb_rational_new ( VALUE  x,
VALUE  y 
)

Definition at line 1760 of file rational.c.

References nurat_s_canonicalize_internal(), and rb_cRational.

Referenced by parser_yylex().

VALUE rb_rational_raw ( VALUE  x,
VALUE  y 
)

Definition at line 1754 of file rational.c.

References nurat_s_new_internal(), and rb_cRational.

VALUE rb_rational_reciprocal ( VALUE  x  ) 

Definition at line 1694 of file rational.c.

References CLASS_OF, f_rational_new_no_reduce2(), and get_dat1.

Referenced by fix_divide().

static int read_den ( const char **  s,
int  strict,
VALUE *  num 
) [inline, static]

Definition at line 2231 of file rational.c.

References NULL, and read_digits().

static int read_digits ( const char **  s,
int  strict,
VALUE *  num,
int *  count 
) [static]

Definition at line 2132 of file rational.c.

References ALLOCV_END, ALLOCV_N, isdecimal(), rb_cstr_to_inum(), strlen(), VALUE, and ZERO.

static int read_num ( const char **  s,
int  numsign,
int  strict,
VALUE *  num 
) [static]

Definition at line 2182 of file rational.c.

References count, f_add, f_div, f_expt10, f_mul, f_negate, INT2NUM, islettere(), NIL_P, NULL, ONE, Qnil, rb_rational_new2, read_digits(), read_sign(), VALUE, and ZERO.

static int read_rat ( const char **  s,
int  strict,
VALUE *  num 
) [static]

Definition at line 2258 of file rational.c.

References read_rat_nos(), and read_sign().

static int read_rat_nos ( const char **  s,
int  sign,
int  strict,
VALUE *  num 
) [static]

Definition at line 2240 of file rational.c.

References f_div, FIX2LONG, FIXNUM_P, read_den(), read_num(), and VALUE.

static int read_sign ( const char **  s  )  [static]

Definition at line 2114 of file rational.c.

References issign.

static void skip_ws ( const char **  s  )  [inline, static]

Definition at line 2270 of file rational.c.

static VALUE string_to_r ( VALUE  self  )  [static]

Definition at line 2348 of file rational.c.

References parse_rat(), rb_eFloatDomainError, rb_must_asciicompat(), rb_raise(), rb_str_modify(), RB_TYPE_P, RSTRING_LEN, RSTRING_PTR, T_FLOAT, and VALUE.

Referenced by Init_Rational().

static VALUE string_to_r_strict ( VALUE  self  )  [static]

Definition at line 2292 of file rational.c.

References f_inspect, parse_rat(), rb_eArgError, rb_eFloatDomainError, rb_must_asciicompat(), rb_raise(), rb_str_modify(), RB_TYPE_P, RSTRING_LEN, RSTRING_PTR, StringValuePtr, T_FLOAT, and VALUE.

Referenced by nurat_s_convert().


Variable Documentation

ID id_abs [static]

Definition at line 33 of file rational.c.

ID id_cmp [static]

Definition at line 33 of file rational.c.

ID id_convert [static]

Definition at line 33 of file rational.c.

ID id_eqeq_p [static]

Definition at line 33 of file rational.c.

ID id_expt [static]

Definition at line 33 of file rational.c.

ID id_fdiv [static]

Definition at line 33 of file rational.c.

ID id_i_den [static]

Definition at line 33 of file rational.c.

Referenced by Init_Rational(), nurat_loader(), and nurat_marshal_load().

ID id_i_num [static]

Definition at line 33 of file rational.c.

Referenced by Init_Rational(), nurat_loader(), and nurat_marshal_load().

ID id_idiv [static]

Definition at line 33 of file rational.c.

Referenced by Init_Rational().

ID id_integer_p [static]

Definition at line 33 of file rational.c.

ID id_negate [static]

Definition at line 33 of file rational.c.

ID id_to_f [static]

Definition at line 33 of file rational.c.

ID id_to_i [static]

Definition at line 33 of file rational.c.

ID id_truncate [static]

Definition at line 33 of file rational.c.

VALUE rb_cRational

Definition at line 31 of file rational.c.


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7