Ruby  2.4.2p198(2017-09-14revision59899)
Macros | Functions | Variables
rational.c File Reference
#include "internal.h"
#include <math.h>
#include <float.h>
#include "ruby_assert.h"
#include <ctype.h>
Include dependency graph for rational.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define ZERO   INT2FIX(0)
 
#define ONE   INT2FIX(1)
 
#define TWO   INT2FIX(2)
 
#define GMP_GCD_DIGITS   1
 
#define INT_POSITIVE_P(x)   (FIXNUM_P(x) ? FIXNUM_POSITIVE_P(x) : BIGNUM_POSITIVE_P(x))
 
#define INT_ZERO_P(x)   (FIXNUM_P(x) ? FIXNUM_ZERO_P(x) : rb_bigzero_p(x))
 
#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)   rb_int_pow(INT2FIX(10), 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)   struct RRational *dat = RRATIONAL(x)
 
#define get_dat2(x, y)   struct RRational *adat = RRATIONAL(x), *bdat = RRATIONAL(y)
 
#define RRATIONAL_SET_NUM(rat, n)   RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->num,(n))
 
#define RRATIONAL_SET_DEN(rat, d)   RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->den,(d))
 
#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 rb_intern(str)   rb_intern_const(str)
 

Functions

static VALUE f_add (VALUE x, VALUE y)
 
static VALUE f_div (VALUE x, VALUE y)
 
static int f_lt_p (VALUE x, VALUE y)
 
static VALUE f_mul (VALUE x, VALUE y)
 
static VALUE f_sub (VALUE x, VALUE y)
 
static VALUE f_abs (VALUE x)
 
 fun1 (integer_p)
 
static VALUE f_eqeq_p (VALUE x, VALUE y)
 
 fun2 (idiv)
 
static int f_one_p (VALUE x)
 
static int f_minus_one_p (VALUE x)
 
static int f_kind_of_p (VALUE x, VALUE c)
 
static int k_numeric_p (VALUE x)
 
static int k_integer_p (VALUE x)
 
static int k_float_p (VALUE x)
 
static int 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 void nurat_canonicalize (VALUE *num, VALUE *den)
 
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_s_convert (int argc, VALUE *argv, VALUE klass)
 
static VALUE nurat_f_rational (int argc, VALUE *argv, VALUE klass)
 
static VALUE nurat_numerator (VALUE self)
 
static VALUE nurat_denominator (VALUE self)
 
VALUE rb_rational_uminus (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 double nurat_to_double (VALUE self)
 
VALUE rb_rational_plus (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_to_f (VALUE self)
 
static VALUE nurat_fdiv (VALUE self, VALUE other)
 
static VALUE f_odd_p (VALUE integer)
 
static VALUE nurat_expt (VALUE self, VALUE other)
 
VALUE rb_rational_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_positive_p (VALUE self)
 
static VALUE nurat_negative_p (VALUE self)
 
VALUE rb_rational_abs (VALUE self)
 
static VALUE nurat_floor (VALUE self)
 
static VALUE nurat_ceil (VALUE self)
 
static VALUE nurat_truncate (VALUE self)
 
static VALUE nurat_round_half_up (VALUE self)
 
static VALUE nurat_round_half_down (VALUE self)
 
static VALUE nurat_round_half_even (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_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)
 
VALUE rb_Rational (VALUE x, VALUE y)
 
VALUE rb_rational_num (VALUE rat)
 
VALUE rb_rational_den (VALUE rat)
 
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_to_r (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)
 
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_idiv
 
static ID id_integer_p
 
static ID id_to_i
 
static ID id_i_num
 
static ID id_i_den
 

Macro Definition Documentation

◆ binop

#define binop (   n,
  op 
)
Value:
inline static VALUE \
f_##n(VALUE x, VALUE y)\
{\
return rb_funcall(x, (op), 1, y);\
}
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
unsigned long VALUE
Definition: ruby.h:85

Definition at line 42 of file rational.c.

Referenced by f_lt_p().

◆ f_boolcast

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

Definition at line 38 of file rational.c.

Referenced by nurat_eqeq_p(), nurat_negative_p(), and nurat_positive_p().

◆ f_ceil

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

Definition at line 1569 of file rational.c.

Referenced by nurat_rationalize_internal().

◆ f_denominator

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

Definition at line 1928 of file rational.c.

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

◆ f_expt10

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

Referenced by f_round_common(), and read_num().

◆ f_inspect

#define f_inspect   rb_inspect

Definition at line 39 of file rational.c.

Referenced by nurat_inspect().

◆ f_nonzero_p

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

Definition at line 175 of file rational.c.

Referenced by f_gcd().

◆ f_numerator

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

Definition at line 1925 of file rational.c.

Referenced by nucomp_numerator(), and numeric_numerator().

◆ f_quo

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

Definition at line 1572 of file rational.c.

◆ f_reciprocal

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

Definition at line 1574 of file rational.c.

Referenced by nurat_rationalize_internal().

◆ f_to_r

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

Definition at line 1931 of file rational.c.

Referenced by numeric_denominator(), and numeric_numerator().

◆ f_to_s

#define f_to_s   rb_obj_as_string

Definition at line 40 of file rational.c.

Referenced by nurat_to_s().

◆ fun1

#define fun1 (   n)
Value:
inline static VALUE \
f_##n(VALUE x)\
{\
return rb_funcall(x, id_##n, 0);\
}
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
unsigned long VALUE
Definition: ruby.h:85

Definition at line 49 of file rational.c.

◆ fun2

#define fun2 (   n)
Value:
inline static VALUE \
f_##n(VALUE x, VALUE y)\
{\
return rb_funcall(x, id_##n, 1, y);\
}
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
unsigned long VALUE
Definition: ruby.h:85

Definition at line 56 of file rational.c.

◆ get_dat1

#define get_dat1 (   x)    struct RRational *dat = RRATIONAL(x)

◆ get_dat2

#define get_dat2 (   x,
 
)    struct RRational *adat = RRATIONAL(x), *bdat = RRATIONAL(y)

◆ GMP_GCD_DIGITS

#define GMP_GCD_DIGITS   1

Definition at line 28 of file rational.c.

Referenced by f_gcd().

◆ id_ceil

#define id_ceil   rb_intern("ceil")

Definition at line 1568 of file rational.c.

◆ id_denominator

#define id_denominator   rb_intern("denominator")

Definition at line 1927 of file rational.c.

◆ id_numerator

#define id_numerator   rb_intern("numerator")

Definition at line 1924 of file rational.c.

◆ id_quo

#define id_quo   rb_intern("quo")

Definition at line 1571 of file rational.c.

◆ id_to_r

#define id_to_r   rb_intern("to_r")

Definition at line 1930 of file rational.c.

◆ INT_POSITIVE_P

#define INT_POSITIVE_P (   x)    (FIXNUM_P(x) ? FIXNUM_POSITIVE_P(x) : BIGNUM_POSITIVE_P(x))

Definition at line 30 of file rational.c.

Referenced by nurat_expt(), and nurat_positive_p().

◆ INT_ZERO_P

#define INT_ZERO_P (   x)    (FIXNUM_P(x) ? FIXNUM_ZERO_P(x) : rb_bigzero_p(x))

◆ k_exact_one_p

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

Definition at line 244 of file rational.c.

Referenced by nurat_s_convert().

◆ k_exact_p

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

Definition at line 240 of file rational.c.

Referenced by nurat_expt().

◆ k_exact_zero_p

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

Definition at line 243 of file rational.c.

Referenced by nurat_coerce(), nurat_expt(), and nurat_s_convert().

◆ k_inexact_p

#define k_inexact_p (   x)    k_float_p(x)

Definition at line 241 of file rational.c.

◆ NDEBUG

#define NDEBUG

Definition at line 16 of file rational.c.

◆ ONE

#define ONE   INT2FIX(1)

◆ rb_intern

#define rb_intern (   str)    rb_intern_const(str)

◆ RRATIONAL_SET_DEN

#define RRATIONAL_SET_DEN (   rat,
 
)    RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->den,(d))

Definition at line 384 of file rational.c.

Referenced by nurat_loader(), and nurat_s_new_internal().

◆ RRATIONAL_SET_NUM

#define RRATIONAL_SET_NUM (   rat,
 
)    RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->num,(n))

Definition at line 383 of file rational.c.

Referenced by nurat_loader(), and nurat_s_new_internal().

◆ TWO

#define TWO   INT2FIX(2)

◆ ZERO

#define ZERO   INT2FIX(0)

Function Documentation

◆ f_abs()

static VALUE f_abs ( VALUE  x)
inlinestatic

Definition at line 132 of file rational.c.

References id_abs, rb_funcall(), rb_int_abs(), and RB_INTEGER_TYPE_P.

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

◆ f_add()

static VALUE f_add ( VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_addsub()

static VALUE f_addsub ( VALUE  self,
VALUE  anum,
VALUE  aden,
VALUE  bnum,
VALUE  bden,
int  k 
)
inlinestatic

◆ f_div()

static VALUE f_div ( VALUE  x,
VALUE  y 
)
inlinestatic

Definition at line 74 of file rational.c.

References FIX2LONG, FIXNUM_P, rb_funcall(), rb_int_div(), and RB_INTEGER_TYPE_P.

Referenced by f_lcm(), nurat_coerce(), and nurat_s_convert().

◆ f_eqeq_p()

static VALUE f_eqeq_p ( VALUE  x,
VALUE  y 
)
inlinestatic

Definition at line 150 of file rational.c.

References FIXNUM_P, and rb_equal().

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

◆ f_format()

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

Definition at line 1718 of file rational.c.

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

Referenced by nurat_inspect(), and nurat_to_s().

◆ f_gcd()

static VALUE f_gcd ( VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_gcd_normal()

static VALUE f_gcd_normal ( VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_imul()

static VALUE f_imul ( long  a,
long  b 
)
inlinestatic

Definition at line 642 of file rational.c.

References assert, f_eqeq_p(), f_mul(), LONG2NUM, MUL_OVERFLOW_LONG_P, rb_big_mul(), rb_int2big(), and ZERO.

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

◆ f_kind_of_p()

static int f_kind_of_p ( VALUE  x,
VALUE  c 
)
inlinestatic

Definition at line 211 of file rational.c.

References rb_obj_is_kind_of().

Referenced by k_numeric_p().

◆ f_lcm()

static VALUE f_lcm ( VALUE  x,
VALUE  y 
)
inlinestatic

Definition at line 370 of file rational.c.

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

Referenced by rb_gcdlcm(), and rb_lcm().

◆ f_lt_p()

static int f_lt_p ( VALUE  x,
VALUE  y 
)
inlinestatic

Definition at line 84 of file rational.c.

References binop, FIXNUM_P, mod, rb_funcall(), RTEST, and SIGNED_VALUE.

Referenced by nurat_rationalize_internal().

◆ f_minus_one_p()

static int f_minus_one_p ( VALUE  x)
inlinestatic

Definition at line 193 of file rational.c.

References INT2FIX, LONG2FIX, Qfalse, rb_equal(), RB_INTEGER_TYPE_P, RB_TYPE_P, RRATIONAL, T_BIGNUM, and T_RATIONAL.

Referenced by nurat_expt().

◆ f_mul()

static VALUE f_mul ( VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_muldiv()

static VALUE f_muldiv ( VALUE  self,
VALUE  anum,
VALUE  aden,
VALUE  bnum,
VALUE  bden,
int  k 
)
inlinestatic

◆ f_odd_p()

static VALUE f_odd_p ( VALUE  integer)
inlinestatic

Definition at line 968 of file rational.c.

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

Referenced by nurat_expt().

◆ f_one_p()

static int f_one_p ( VALUE  x)
inlinestatic

◆ f_rational_new2()

static VALUE f_rational_new2 ( VALUE  klass,
VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_rational_new_bang1()

static VALUE f_rational_new_bang1 ( VALUE  klass,
VALUE  x 
)
inlinestatic

◆ f_rational_new_no_reduce2()

static VALUE f_rational_new_no_reduce2 ( VALUE  klass,
VALUE  x,
VALUE  y 
)
inlinestatic

◆ f_round_common()

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

◆ f_sub()

static VALUE f_sub ( VALUE  x,
VALUE  y 
)
inlinestatic

◆ float_decode_internal()

static void float_decode_internal ( VALUE  self,
VALUE rf,
VALUE rn 
)
static

Definition at line 2114 of file rational.c.

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

Referenced by float_to_r(), and rb_flt_rationalize().

◆ float_denominator()

static VALUE float_denominator ( VALUE  self)
static

Definition at line 2045 of file rational.c.

References float_to_r(), INT2FIX, isinf(), isnan, k_integer_p(), nurat_denominator(), ONE, and RFLOAT_VALUE.

Referenced by Init_Rational().

◆ float_numerator()

static VALUE float_numerator ( VALUE  self)
static

Definition at line 2022 of file rational.c.

References float_to_r(), isinf(), isnan, k_integer_p(), nurat_numerator(), and RFLOAT_VALUE.

Referenced by Init_Rational().

◆ float_rationalize()

static VALUE float_rationalize ( int  argc,
VALUE argv,
VALUE  self 
)
static

◆ float_to_r()

static VALUE float_to_r ( VALUE  self)
static

◆ fun1()

fun1 ( integer_p  )

Definition at line 139 of file rational.c.

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

◆ fun2()

fun2 ( idiv  )

Definition at line 157 of file rational.c.

References FIXNUM_ZERO_P, rb_equal(), RB_INTEGER_TYPE_P, RB_TYPE_P, RRATIONAL, T_RATIONAL, and ZERO.

◆ i_gcd()

static long i_gcd ( long  x,
long  y 
)
inlinestatic

Definition at line 282 of file rational.c.

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

◆ Init_Rational()

void Init_Rational ( void  )

◆ integer_denominator()

static VALUE integer_denominator ( VALUE  self)
static

Definition at line 2005 of file rational.c.

References float_to_r(), and INT2FIX.

Referenced by Init_Rational().

◆ integer_numerator()

static VALUE integer_numerator ( VALUE  self)
static

Definition at line 1993 of file rational.c.

Referenced by Init_Rational().

◆ integer_rationalize()

static VALUE integer_rationalize ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 2107 of file rational.c.

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

Referenced by Init_Rational().

◆ integer_to_r()

static VALUE integer_to_r ( VALUE  self)
static

Definition at line 2094 of file rational.c.

References rb_rational_new1.

Referenced by Init_Rational(), and integer_rationalize().

◆ isdecimal()

static int isdecimal ( int  c)
inlinestatic

Definition at line 2286 of file rational.c.

Referenced by read_digits().

◆ islettere()

static int islettere ( int  c)
inlinestatic

Definition at line 2336 of file rational.c.

Referenced by read_num().

◆ issign()

static int issign ( int  c)
inlinestatic

Definition at line 2268 of file rational.c.

Referenced by read_sign().

◆ k_float_p()

static int k_float_p ( VALUE  x)
inlinestatic

Definition at line 229 of file rational.c.

References RB_FLOAT_TYPE_P.

Referenced by f_round_common().

◆ k_integer_p()

static int k_integer_p ( VALUE  x)
inlinestatic

◆ k_numeric_p()

static int k_numeric_p ( VALUE  x)
inlinestatic

Definition at line 217 of file rational.c.

References f_kind_of_p(), and rb_cNumeric.

Referenced by nurat_expt(), nurat_int_check(), and nurat_s_convert().

◆ k_rational_p()

static int k_rational_p ( VALUE  x)
inlinestatic

Definition at line 235 of file rational.c.

References RB_TYPE_P, and T_RATIONAL.

Referenced by f_rational_new2(), f_rational_new_no_reduce2(), f_round_common(), and nurat_expt().

◆ nilclass_rationalize()

static VALUE nilclass_rationalize ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 2078 of file rational.c.

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

Referenced by Init_Rational().

◆ nilclass_to_r()

static VALUE nilclass_to_r ( VALUE  self)
static

Definition at line 2065 of file rational.c.

References INT2FIX, and rb_rational_new1.

Referenced by Init_Rational(), and nilclass_rationalize().

◆ numeric_denominator()

static VALUE numeric_denominator ( VALUE  self)
static

Definition at line 1952 of file rational.c.

References f_denominator, and f_to_r.

Referenced by Init_Rational().

◆ numeric_numerator()

static VALUE numeric_numerator ( VALUE  self)
static

Definition at line 1940 of file rational.c.

References f_numerator, and f_to_r.

Referenced by Init_Rational().

◆ numeric_quo()

static VALUE numeric_quo ( VALUE  x,
VALUE  y 
)
static

◆ nurat_canonicalize()

static void nurat_canonicalize ( VALUE num,
VALUE den 
)
static

◆ nurat_ceil()

static VALUE nurat_ceil ( VALUE  self)
static

Definition at line 1285 of file rational.c.

References get_dat1, rb_int_idiv(), and rb_int_uminus().

Referenced by nurat_ceil_n().

◆ nurat_ceil_n()

static VALUE nurat_ceil_n ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 1470 of file rational.c.

References f_round_common(), and nurat_ceil().

Referenced by Init_Rational().

◆ nurat_coerce()

static VALUE nurat_coerce ( VALUE  self,
VALUE  other 
)
static

◆ nurat_denominator()

static VALUE nurat_denominator ( VALUE  self)
static

Definition at line 616 of file rational.c.

References get_dat1.

Referenced by float_denominator(), Init_Rational(), and rb_rational_den().

◆ nurat_div()

static VALUE nurat_div ( VALUE  self,
VALUE  other 
)
static

◆ nurat_dumper()

static VALUE nurat_dumper ( VALUE  self)
static

Definition at line 1770 of file rational.c.

Referenced by Init_Rational().

◆ nurat_eqeq_p()

static VALUE nurat_eqeq_p ( VALUE  self,
VALUE  other 
)
static

◆ nurat_expt()

static VALUE nurat_expt ( VALUE  self,
VALUE  other 
)
static

◆ nurat_f_rational()

static VALUE nurat_f_rational ( int  argc,
VALUE argv,
VALUE  klass 
)
static

Definition at line 580 of file rational.c.

References nurat_s_convert(), and rb_cRational.

Referenced by Init_Rational().

◆ nurat_fdiv()

static VALUE nurat_fdiv ( VALUE  self,
VALUE  other 
)
static

◆ nurat_floor()

static VALUE nurat_floor ( VALUE  self)
static

Definition at line 1278 of file rational.c.

References get_dat1, and rb_int_idiv().

Referenced by nurat_floor_n().

◆ nurat_floor_n()

static VALUE nurat_floor_n ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 1446 of file rational.c.

References f_round_common(), and nurat_floor().

Referenced by Init_Rational().

◆ nurat_hash()

static VALUE nurat_hash ( VALUE  self)
static

Definition at line 1703 of file rational.c.

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

Referenced by Init_Rational().

◆ nurat_inspect()

static VALUE nurat_inspect ( VALUE  self)
static

Definition at line 1757 of file rational.c.

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

Referenced by Init_Rational().

◆ nurat_int_check()

static void nurat_int_check ( VALUE  num)
inlinestatic

Definition at line 456 of file rational.c.

References k_numeric_p(), rb_eTypeError, RB_INTEGER_TYPE_P, and rb_raise().

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

◆ nurat_int_value()

static VALUE nurat_int_value ( VALUE  num)
inlinestatic

Definition at line 465 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().

◆ nurat_loader()

static VALUE nurat_loader ( VALUE  self,
VALUE  a 
)
static

◆ nurat_marshal_dump()

static VALUE nurat_marshal_dump ( VALUE  self)
static

Definition at line 1795 of file rational.c.

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

Referenced by Init_Rational().

◆ nurat_marshal_load()

static VALUE nurat_marshal_load ( VALUE  self,
VALUE  a 
)
static

◆ nurat_mul()

static VALUE nurat_mul ( VALUE  self,
VALUE  other 
)
static

◆ nurat_negative_p()

static VALUE nurat_negative_p ( VALUE  self)
static

Definition at line 1247 of file rational.c.

References f_boolcast, get_dat1, and INT_NEGATIVE_P.

Referenced by Init_Rational(), and nurat_rationalize().

◆ nurat_numerator()

static VALUE nurat_numerator ( VALUE  self)
static

Definition at line 597 of file rational.c.

References get_dat1.

Referenced by float_numerator(), Init_Rational(), and rb_rational_num().

◆ nurat_positive_p()

static VALUE nurat_positive_p ( VALUE  self)
static

Definition at line 1234 of file rational.c.

References f_boolcast, get_dat1, and INT_POSITIVE_P.

Referenced by Init_Rational().

◆ nurat_rationalize()

static VALUE nurat_rationalize ( int  argc,
VALUE argv,
VALUE  self 
)
static

◆ nurat_rationalize_internal()

static void nurat_rationalize_internal ( VALUE  a,
VALUE  b,
VALUE p,
VALUE q 
)
static

◆ nurat_round_half_down()

static VALUE nurat_round_half_down ( VALUE  self)
static

◆ nurat_round_half_even()

static VALUE nurat_round_half_even ( VALUE  self)
static

◆ nurat_round_half_up()

static VALUE nurat_round_half_up ( VALUE  self)
static

◆ nurat_round_n()

static VALUE nurat_round_n ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 1519 of file rational.c.

References f_round_common(), NULL, rb_num_get_rounding_option(), rb_scan_args(), and ROUND_FUNC.

Referenced by Init_Rational().

◆ nurat_s_alloc()

static VALUE nurat_s_alloc ( VALUE  klass)
static

◆ nurat_s_canonicalize_internal()

static VALUE nurat_s_canonicalize_internal ( VALUE  klass,
VALUE  num,
VALUE  den 
)
inlinestatic

◆ nurat_s_canonicalize_internal_no_reduce()

static VALUE nurat_s_canonicalize_internal_no_reduce ( VALUE  klass,
VALUE  num,
VALUE  den 
)
inlinestatic

Definition at line 505 of file rational.c.

References f_one_p(), nurat_canonicalize(), and nurat_s_new_internal().

Referenced by f_rational_new_no_reduce2(), and rb_rational_abs().

◆ nurat_s_convert()

static VALUE nurat_s_convert ( int  argc,
VALUE argv,
VALUE  klass 
)
static

◆ nurat_s_new()

static VALUE nurat_s_new ( int  argc,
VALUE argv,
VALUE  klass 
)
static

Definition at line 517 of file rational.c.

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

Referenced by Init_Rational(), and nurat_s_convert().

◆ nurat_s_new_internal()

static VALUE nurat_s_new_internal ( VALUE  klass,
VALUE  num,
VALUE  den 
)
inlinestatic

◆ nurat_sub()

static VALUE nurat_sub ( VALUE  self,
VALUE  other 
)
static

◆ nurat_to_double()

static double nurat_to_double ( VALUE  self)
static

◆ nurat_to_f()

static VALUE nurat_to_f ( VALUE  self)
static

Definition at line 1548 of file rational.c.

References DBL2NUM, and nurat_to_double().

Referenced by nurat_coerce(), nurat_div(), nurat_expt(), and nurat_fdiv().

◆ nurat_to_r()

static VALUE nurat_to_r ( VALUE  self)
static

Definition at line 1563 of file rational.c.

Referenced by Init_Rational().

◆ nurat_to_s()

static VALUE nurat_to_s ( VALUE  self)
static

Definition at line 1741 of file rational.c.

References f_format(), and f_to_s.

Referenced by Init_Rational().

◆ nurat_truncate()

static VALUE nurat_truncate ( VALUE  self)
static

Definition at line 1307 of file rational.c.

References get_dat1, INT_NEGATIVE_P, rb_int_idiv(), and rb_int_uminus().

Referenced by f_round_common(), Init_Rational(), and nurat_truncate_n().

◆ nurat_truncate_n()

static VALUE nurat_truncate_n ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 1494 of file rational.c.

References f_round_common(), and nurat_truncate().

Referenced by Init_Rational().

◆ parse_rat()

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

Definition at line 2464 of file rational.c.

References read_rat(), and skip_ws().

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

◆ rb_cstr_to_rat()

VALUE rb_cstr_to_rat ( const char *  s,
int  strict 
)

Definition at line 2560 of file rational.c.

References parse_rat(), rb_eFloatDomainError, RB_FLOAT_TYPE_P, and rb_raise().

Referenced by str2num().

◆ rb_flt_rationalize()

VALUE rb_flt_rationalize ( VALUE  flt)

◆ rb_flt_rationalize_with_prec()

VALUE rb_flt_rationalize_with_prec ( VALUE  flt,
VALUE  prec 
)

◆ rb_gcd()

VALUE rb_gcd ( VALUE  self,
VALUE  other 
)

Definition at line 1850 of file rational.c.

References f_gcd(), and nurat_int_value().

Referenced by Init_Rational(), and rb_int_fdiv_double().

◆ rb_gcd_normal()

VALUE rb_gcd_normal ( VALUE  x,
VALUE  y 
)

Definition at line 335 of file rational.c.

References f_gcd_normal().

◆ rb_gcdlcm()

VALUE rb_gcdlcm ( VALUE  self,
VALUE  other 
)

Definition at line 1885 of file rational.c.

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

Referenced by Init_Rational().

◆ rb_lcm()

VALUE rb_lcm ( VALUE  self,
VALUE  other 
)

Definition at line 1868 of file rational.c.

References f_lcm(), and nurat_int_value().

Referenced by Init_Rational(), and nucomp_denominator().

◆ rb_Rational()

VALUE rb_Rational ( VALUE  x,
VALUE  y 
)

Definition at line 1904 of file rational.c.

References nurat_s_convert(), and rb_cRational.

Referenced by BigDecimal_to_r().

◆ rb_rational_abs()

VALUE rb_rational_abs ( VALUE  self)

◆ rb_rational_cmp()

VALUE rb_rational_cmp ( VALUE  self,
VALUE  other 
)

◆ rb_rational_den()

VALUE rb_rational_den ( VALUE  rat)

Definition at line 1919 of file rational.c.

References nurat_denominator().

◆ rb_rational_new()

VALUE rb_rational_new ( VALUE  x,
VALUE  y 
)

◆ rb_rational_num()

VALUE rb_rational_num ( VALUE  rat)

Definition at line 1913 of file rational.c.

References nurat_numerator().

◆ rb_rational_plus()

VALUE rb_rational_plus ( VALUE  self,
VALUE  other 
)

◆ rb_rational_raw()

VALUE rb_rational_raw ( VALUE  x,
VALUE  y 
)

Definition at line 1892 of file rational.c.

References nurat_s_new_internal(), and rb_cRational.

◆ rb_rational_reciprocal()

VALUE rb_rational_reciprocal ( VALUE  x)

Definition at line 1832 of file rational.c.

References CLASS_OF, f_rational_new_no_reduce2(), and get_dat1.

Referenced by fix_divide().

◆ rb_rational_uminus()

VALUE rb_rational_uminus ( VALUE  self)

◆ read_den()

static int read_den ( const char **  s,
int  strict,
VALUE num 
)
inlinestatic

Definition at line 2412 of file rational.c.

References NULL, and read_digits().

Referenced by read_rat_nos().

◆ read_digits()

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

Definition at line 2292 of file rational.c.

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

Referenced by read_den(), and read_num().

◆ read_num()

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

◆ read_rat()

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

Definition at line 2445 of file rational.c.

References read_rat_nos(), and read_sign().

Referenced by parse_rat().

◆ read_rat_nos()

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

Definition at line 2421 of file rational.c.

References FIX2LONG, FIXNUM_P, nurat_div(), rb_int_div(), RB_TYPE_P, read_den(), read_num(), and T_RATIONAL.

Referenced by read_rat().

◆ read_sign()

static int read_sign ( const char **  s)
static

Definition at line 2274 of file rational.c.

References issign().

Referenced by read_num(), and read_rat().

◆ skip_ws()

static void skip_ws ( const char **  s)
inlinestatic

Definition at line 2457 of file rational.c.

Referenced by parse_rat().

◆ string_to_r()

static VALUE string_to_r ( VALUE  self)
static

◆ string_to_r_strict()

static VALUE string_to_r_strict ( VALUE  self)
static

Variable Documentation

◆ id_abs

ID id_abs
static

Definition at line 35 of file rational.c.

Referenced by f_abs(), and Init_Rational().

◆ id_i_den

ID id_i_den
static

Definition at line 35 of file rational.c.

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

◆ id_i_num

ID id_i_num
static

Definition at line 35 of file rational.c.

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

◆ id_idiv

ID id_idiv
static

Definition at line 35 of file rational.c.

Referenced by Init_Rational().

◆ id_integer_p

ID id_integer_p
static

Definition at line 35 of file rational.c.

Referenced by Init_Rational().

◆ id_to_i

ID id_to_i
static

Definition at line 35 of file rational.c.

Referenced by fun1(), and Init_Rational().

◆ rb_cRational

VALUE rb_cRational