bignum.c File Reference
`#include "ruby/ruby.h"`
`#include "ruby/util.h"`
`#include "internal.h"`
`#include <math.h>`
`#include <float.h>`
`#include <ctype.h>`
`#include <assert.h>`

Go to the source code of this file.

## Data Structures

struct | big_div_struct

## Macros

#define | BDIGITS(x) (RBIGNUM_DIGITS(x))
#define | BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)
#define | BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)
#define | BIGRAD_HALF ((BDIGIT)(BIGRAD >> 1))
#define | DIGSPERLONG (SIZEOF_LONG/SIZEOF_BDIGITS)
#define | BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG)
#define | BIGDN(x) RSHIFT((x),BITSPERDIG)
#define | BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1)))
#define | BDIGMAX ((BDIGIT)-1)
#define | BIGZEROP(x)
#define | BIGNUM_DEBUG 0
#define | ON_DEBUG(x)
#define | RBIGNUM_SET_LEN(b, l)
#define | bignew(len, sign) bignew_1(rb_cBignum,(len),(sign))
#define | QUAD_SIZE 8
#define | BNEG(b) (RSHIFT(((BDIGIT*)(b))[QUAD_SIZE/SIZEOF_BDIGITS-1],BITSPERDIG-1) != 0)
#define | ISDIGIT(c) ('0' <= (c) && (c) <= '9')
#define | conv_digit(c)
#define | POW2_P(x) (((x)&((x)-1))==0)
#define | MASK_55 0x55555555UL
#define | MASK_33 0x33333333UL
#define | MASK_0f 0x0f0f0f0fUL
#define | LOG2_KARATSUBA_DIGITS 7
#define | KARATSUBA_DIGITS (1L<<LOG2_KARATSUBA_DIGITS)
#define | MAX_BIG2STR_TABLE_ENTRIES 64
#define | KARATSUBA_MUL_DIGITS 70
#define | TOOM3_MUL_DIGITS 150
#define | DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)

## Functions

static int | bigzero_p (VALUE x)
int | rb_bigzero_p (VALUE x)
int | rb_cmpint (VALUE val, VALUE a, VALUE b)
static void | rb_big_realloc (VALUE big, long len)
void | rb_big_resize (VALUE big, long len)
static VALUE | bignew_1 (VALUE klass, long len, int sign)
VALUE | rb_big_new (long len, int sign)
VALUE | rb_big_clone (VALUE x)
static void | get2comp (VALUE x)
void | rb_big_2comp (VALUE x)
static VALUE | bigtrunc (VALUE x)
static VALUE | bigfixize (VALUE x)
static VALUE | bignorm (VALUE x)
VALUE | rb_big_norm (VALUE x)
VALUE | rb_uint2big (VALUE n)
VALUE | rb_int2big (SIGNED_VALUE n)
VALUE | rb_uint2inum (VALUE n)
VALUE | rb_int2inum (SIGNED_VALUE n)
void | rb_big_pack (VALUE val, unsigned long *buf, long num_longs)
VALUE | rb_big_unpack (unsigned long *buf, long num_longs)
static int | quad_buf_complement (char *buf, size_t len)
void | rb_quad_pack (char *buf, VALUE val)
VALUE | rb_quad_unpack (const char *buf, int sign)
VALUE | rb_cstr_to_inum (const char *str, int base, int badcheck)
VALUE | rb_str_to_inum (VALUE str, int base, int badcheck)
VALUE | rb_cstr2inum (const char *str, int base)
VALUE | rb_str2inum (VALUE str, int base)
static VALUE | bigsqr (VALUE x)
static void | bigdivmod (VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
static int | ones (register unsigned long x)
static unsigned long | next_pow2 (register unsigned long x)
static int | floor_log2 (register unsigned long x)
static int | ceil_log2 (register unsigned long x)
static void | power_cache_init (void)
static VALUE | power_cache_get_power0 (int base, int i)
static VALUE | power_cache_get_power (int base, long n1, long *m1)
static long | big2str_find_n1 (VALUE x, int base)
static long | big2str_orig (VALUE x, int base, char *ptr, long len, long hbase, int trim)
static long | big2str_karatsuba (VALUE x, int base, char *ptr, long n1, long len, long hbase, int trim)
VALUE | rb_big2str0 (VALUE x, int base, int trim)
VALUE | rb_big2str (VALUE x, int base)
static VALUE | rb_big_to_s (int argc, VALUE *argv, VALUE x)
static VALUE | big2ulong (VALUE x, const char *type, int check)
VALUE | rb_big2ulong_pack (VALUE x)
VALUE | rb_big2ulong (VALUE x)
SIGNED_VALUE | rb_big2long (VALUE x)
static VALUE | dbl2big (double d)
VALUE | rb_dbl2big (double d)
static int | nlz (BDIGIT x)
static double | big2dbl (VALUE x)
double | rb_big2dbl (VALUE x)
static VALUE | rb_big_to_f (VALUE x)
VALUE | rb_big_cmp (VALUE x, VALUE y)
static VALUE | big_op (VALUE x, VALUE y, int op)
static VALUE | big_gt (VALUE x, VALUE y)
static VALUE | big_ge (VALUE x, VALUE y)
static VALUE | big_lt (VALUE x, VALUE y)
static VALUE | big_le (VALUE x, VALUE y)
VALUE | rb_big_eq (VALUE x, VALUE y)
static VALUE | rb_big_eql (VALUE x, VALUE y)
VALUE | rb_big_uminus (VALUE x)
static VALUE | rb_big_neg (VALUE x)
static void | bigsub_core (BDIGIT *xds, long xn, BDIGIT *yds, long yn, BDIGIT *zds, long zn)
static VALUE | bigsub (VALUE x, VALUE y)
static VALUE | bigadd_int (VALUE x, long y)
static VALUE | bigsub_int (VALUE x, long y0)
static void | bigadd_core (BDIGIT *xds, long xn, BDIGIT *yds, long yn, BDIGIT *zds, long zn)
static VALUE | bigadd (VALUE x, VALUE y, int sign)
VALUE | rb_big_plus (VALUE x, VALUE y)
VALUE | rb_big_minus (VALUE x, VALUE y)
static long | big_real_len (VALUE x)
static VALUE | bigmul1_single (VALUE x, VALUE y)
static VALUE | bigmul1_normal (VALUE x, VALUE y)
static VALUE | bigmul0 (VALUE x, VALUE y)
static VALUE | bigmul1_balance (VALUE x, VALUE y)
static void | big_split (VALUE v, long n, volatile VALUE *ph, volatile VALUE *pl)
static VALUE | bigmul1_karatsuba (VALUE x, VALUE y)
static void | biglsh_bang (BDIGIT *xds, long xn, unsigned long shift)
static void | bigrsh_bang (BDIGIT *xds, long xn, unsigned long shift)
static void | big_split3 (VALUE v, long n, volatile VALUE *p0, volatile VALUE *p1, volatile VALUE *p2)
static VALUE | big_lshift (VALUE, unsigned long)
static VALUE | big_rshift (VALUE, unsigned long)
static VALUE | bigdivrem (VALUE, VALUE, volatile VALUE *, volatile VALUE *)
static VALUE | bigmul1_toom3 (VALUE x, VALUE y)
static VALUE | bigsqr_fast (VALUE x)
static VALUE | big_sparse_p (VALUE x)
VALUE | rb_big_mul (VALUE x, VALUE y)
static VALUE | bigdivrem1 (void *ptr)
static void | rb_big_stop (void *ptr)
static VALUE | rb_big_divide (VALUE x, VALUE y, ID op)
VALUE | rb_big_div (VALUE x, VALUE y)
VALUE | rb_big_idiv (VALUE x, VALUE y)
VALUE | rb_big_modulo (VALUE x, VALUE y)
static VALUE | rb_big_remainder (VALUE x, VALUE y)
VALUE | rb_big_divmod (VALUE x, VALUE y)
static int | bdigbitsize (BDIGIT x)
static VALUE | big_shift (VALUE x, long n)
static VALUE | big_fdiv (VALUE x, VALUE y)
VALUE | rb_big_fdiv (VALUE x, VALUE y)
VALUE | rb_big_pow (VALUE x, VALUE y)
static VALUE | bit_coerce (VALUE x)
static VALUE | bigand_int (VALUE x, long y)
VALUE | rb_big_and (VALUE xx, VALUE yy)
static VALUE | bigor_int (VALUE x, long y)
VALUE | rb_big_or (VALUE xx, VALUE yy)
static VALUE | bigxor_int (VALUE x, long y)
VALUE | rb_big_xor (VALUE xx, VALUE yy)
static VALUE | check_shiftdown (VALUE y, VALUE x)
VALUE | rb_big_lshift (VALUE x, VALUE y)
VALUE | rb_big_rshift (VALUE x, VALUE y)
static VALUE | rb_big_aref (VALUE x, VALUE y)
static VALUE | rb_big_hash (VALUE x)
static VALUE | rb_big_coerce (VALUE x, VALUE y)
static VALUE | rb_big_abs (VALUE x)
static VALUE | rb_big_size (VALUE big)
static VALUE | rb_big_odd_p (VALUE num)
static VALUE | rb_big_even_p (VALUE num)
void | Init_Bignum (void)

## Variables

VALUE | rb_cBignum
static VALUE | big_three = Qnil
const char | ruby_digitmap [] = "0123456789abcdefghijklmnopqrstuvwxyz"
static VALUE | big2str_power_cache [35][MAX_BIG2STR_TABLE_ENTRIES]

## Macro Definition Documentation

#define BDIGITS | ( |  | x | ) | (RBIGNUM_DIGITS(x))

Definition at line 32 of file bignum.c.

Referenced by big2dbl(), big2str_orig(), big2ulong(), big_fdiv(), big_lshift(), big_real_len(), big_rshift(), big_sparse_p(), big_split(), bigadd(), bigadd_int(), bigand_int(), bigdivrem(), bigfixize(), bigmul1_balance(), bigmul1_karatsuba(), bigmul1_normal(), bigmul1_single(), bigmul1_toom3(), bigor_int(), bigsqr_fast(), bigsub(), bigsub_int(), bigtrunc(), bigxor_int(), bigzero_p(), dbl2big(), get2comp(), rb_big_and(), rb_big_aref(), rb_big_clone(), rb_big_cmp(), rb_big_eq(), rb_big_eql(), rb_big_even_p(), rb_big_hash(), rb_big_neg(), rb_big_odd_p(), rb_big_or(), rb_big_pack(), rb_big_unpack(), rb_big_xor(), rb_cstr_to_inum(), rb_quad_pack(), rb_quad_unpack(), and rb_uint2big().

#define BDIGMAX ((BDIGIT)-1)

Definition at line 43 of file bignum.c.

#define BIGDN | ( |  | x | ) | RSHIFT((x),BITSPERDIG)

Definition at line 41 of file bignum.c.

Referenced by big_lshift(), bigadd_core(), bigadd_int(), bigand_int(), bigdivrem(), bigdivrem1(), bigmul1_normal(), bigmul1_single(), bigor_int(), bigsqr_fast(), bigsub_core(), bigsub_int(), bigxor_int(), get2comp(), rb_big_aref(), rb_big_unpack(), rb_cstr_to_inum(), and rb_uint2big().

#define BIGLO | ( |  | x | ) | ((BDIGIT)((x) & (BIGRAD-1)))

Definition at line 42 of file bignum.c.

Referenced by big_lshift(), big_rshift(), bigadd_core(), bigadd_int(), bigand_int(), bigdivrem(), bigdivrem1(), bigmul1_normal(), bigmul1_single(), bigor_int(), bigsqr_fast(), bigsub_core(), bigsub_int(), bigxor_int(), get2comp(), rb_big_unpack(), rb_cstr_to_inum(), and rb_uint2big().

#define bignew | ( |  | len,
|  |  | sign
| ) |  | bignew_1(rb_cBignum,(len),(sign))

Definition at line 180 of file bignum.c.

Referenced by big_lshift(), big_rshift(), big_split(), bigadd(), bigadd_int(), bigand_int(), bigdivrem(), bigmul1_balance(), bigmul1_karatsuba(), bigmul1_normal(), bigmul1_single(), bigmul1_toom3(), bigor_int(), bigsqr_fast(), bigsub(), bigsub_int(), bigxor_int(), dbl2big(), rb_big_and(), rb_big_new(), rb_big_or(), rb_big_unpack(), rb_big_xor(), rb_cstr_to_inum(), rb_quad_unpack(), and rb_uint2big().

#define BIGNUM_DEBUG 0

Definition at line 49 of file bignum.c.

#define BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)

Definition at line 34 of file bignum.c.

Referenced by big2dbl(), bigdivrem1(), bigor_int(), dbl2big(), and rb_big_or().

#define BIGRAD_HALF ((BDIGIT)(BIGRAD >> 1))

Definition at line 35 of file bignum.c.

Referenced by bigmul1_toom3().

#define BIGUP | ( |  | x | ) | ((BDIGIT_DBL)(x) << BITSPERDIG)

Definition at line 40 of file bignum.c.

Referenced by big2str_orig(), big2ulong(), big_rshift(), bigdivrem(), bigdivrem1(), and bigfixize().

#define BIGZEROP | ( |  | x | ) |

Value:
(RBIGNUM_LEN(x) == 0 || \
(BDIGITS(x)[0] == 0 && \
(RBIGNUM_LEN(x) == 1 || bigzero_p(x))))

Definition at line 45 of file bignum.c.

Referenced by big2str_find_n1(), big2str_karatsuba(), bigdivmod(), bigdivrem(), bigmul1_karatsuba(), rb_big2str0(), rb_big_pow(), rb_bigzero_p(), and rb_cmpint().

#define BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)

Definition at line 33 of file bignum.c.

Referenced by bdigbitsize(), big2dbl(), big2str_find_n1(), big_fdiv(), big_lshift(), big_rshift(), bigdivrem(), biglsh_bang(), bigrsh_bang(), nlz(), rb_big_aref(), rb_big_pack(), and rb_cstr_to_inum().

#define BNEG | ( |  | b | ) | (RSHIFT(((BDIGIT*)(b))[QUAD_SIZE/SIZEOF_BDIGITS-1],BITSPERDIG-1) != 0)

Definition at line 543 of file bignum.c.

Referenced by rb_quad_unpack().

#define conv_digit | ( |  | c | ) |

Value:
(!ISASCII(c) ? -1 : \
ISDIGIT(c) ? ((c) - '0') : \
ISLOWER(c) ? ((c) - 'a' + 10) : \
ISUPPER(c) ? ((c) - 'A' + 10) : \
-1)

Referenced by rb_cstr_to_inum().

#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)

Referenced by big_fdiv().

#define DIGSPERLONG (SIZEOF_LONG/SIZEOF_BDIGITS)

Definition at line 36 of file bignum.c.

Referenced by big2ulong(), rb_big_aref(), rb_big_pack(), rb_big_unpack(), rb_num_to_uint(), and rb_uint2big().

#define ISDIGIT | ( |  | c | ) | ('0' <= (c) && (c) <= '9')

Referenced by BigDecimal_load(), BigDecimal_to_s(), mktime_do(), pack_pack(), pack_unpack(), parser_yylex(), rb_cstr_to_dbl(), rb_scan_args(), rb_str_succ(), rb_str_upto(), ruby_strtod(), set_encoding_const(), utc_offset_arg(), VpAlloc(), and yaml_org_handler().

#define KARATSUBA_DIGITS (1L<<LOG2_KARATSUBA_DIGITS)

Definition at line 928 of file bignum.c.

Referenced by big2str_karatsuba(), power_cache_get_power(), power_cache_get_power0(), and rb_big2str0().

#define KARATSUBA_MUL_DIGITS 70

Definition at line 2486 of file bignum.c.

Referenced by bigmul0().

#define LOG2_KARATSUBA_DIGITS 7

Definition at line 927 of file bignum.c.

Referenced by power_cache_get_power().

#define MASK_0f 0x0f0f0f0fUL

Referenced by ones().

#define MASK_33 0x33333333UL

Referenced by ones().

#define MASK_55 0x55555555UL

Referenced by ones().

#define MAX_BIG2STR_TABLE_ENTRIES 64

Definition at line 929 of file bignum.c.

Referenced by power_cache_get_power(), and power_cache_init().

#define ON_DEBUG | ( |  | x | ) |

Definition at line 71 of file bignum.c.

#define POW2_P | ( |  | x | ) | (((x)&((x)-1))==0)

Definition at line 865 of file bignum.c.

Referenced by ceil_log2().

#define QUAD_SIZE 8

Definition at line 437 of file bignum.c.

Referenced by rb_quad_pack(), and rb_quad_unpack().

#define RBIGNUM_SET_LEN | ( |  | b,
|  |  | l
| ) |  |

Value:
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
(void)(RBASIC(b)->flags = \
(RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \
((l) << RBIGNUM_EMBED_LEN_SHIFT)) : \
(void)(RBIGNUM(b)->as.heap.len = (l)))

Definition at line 114 of file bignum.c.

Referenced by bigdivrem(), bigmul1_balance(), bignew_1(), rb_big_realloc(), rb_big_resize(), and rb_uint2big().

#define TOOM3_MUL_DIGITS 150

Definition at line 2487 of file bignum.c.

Referenced by bigmul0().

## Function Documentation

static int bdigbitsize | ( | BDIGIT | x | ) |

static

Definition at line 2911 of file bignum.c.

References BDIGIT, BITSPERDIG, and size.

Referenced by big_fdiv().

static double big2dbl | ( | VALUE | x | ) |

static

Definition at line 1339 of file bignum.c.

References BDIGIT, BDIGITS, BIGRAD, bigtrunc(), BITSPERDIG, DBL_MANT_DIG, DBL_MAX_EXP, i, nlz(), RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by big_fdiv(), rb_big2dbl(), and rb_big_fdiv().

static long big2str_find_n1 | ( | VALUE | x,
|  | int | base
| ) |  |

static

Definition at line 995 of file bignum.c.

References BIGZEROP, BITSPERDIG, CHAR_BIT, FIXNUM_P, LONG_MAX, rb_bug(), rb_eRangeError, rb_raise(), and RBIGNUM_LEN.

Referenced by rb_big2str0().

static long big2str_karatsuba | ( | VALUE | x,
|  | int | base,
|  | char * | ptr,
|  | long | n1,
|  | long | len,
|  | long | hbase,
|  | int | trim
| ) |  |

static

Definition at line 1065 of file bignum.c.

References big2str_orig(), bigdivmod(), BIGZEROP, KARATSUBA_DIGITS, len, power_cache_get_power(), and rb_big_resize().

Referenced by rb_big2str0().

static long big2str_orig | ( | VALUE | x,
|  | int | base,
|  | char * | ptr,
|  | long | len,
|  | long | hbase,
|  | int | trim
| ) |  |

static

Definition at line 1033 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGUP, i, len, MEMMOVE, RBIGNUM_LEN, and SIZEOF_BDIGITS.

Referenced by big2str_karatsuba(), and rb_big2str0().

static VALUE big2ulong | ( | VALUE | x,
|  | const char * | type,
|  | int | check
| ) |  |

static

Definition at line 1177 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGUP, DIGSPERLONG, len, rb_eRangeError, rb_raise(), and RBIGNUM_LEN.

Referenced by rb_big2long(), rb_big2ulong(), rb_big2ulong_pack(), rb_big_aref(), rb_big_lshift(), and rb_big_rshift().

static VALUE big_fdiv | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2945 of file bignum.c.

References bdigbitsize(), BDIGITS, big2dbl(), big_shift(), bigdivrem(), bigtrunc(), BITSPERDIG, dbl2big(), DBL2NUM, DBL_BIGDIG, DBL_MANT_DIG, FIX2LONG, i, INFINITY, rb_bug(), rb_int2big(), RBIGNUM_LEN, RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by rb_big_fdiv().

static VALUE big_ge | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1546 of file bignum.c.

References big_op().

Referenced by Init_Bignum().

static VALUE big_gt | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1532 of file bignum.c.

References big_op().

Referenced by Init_Bignum().

static VALUE big_le | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1574 of file bignum.c.

References big_op().

Referenced by Init_Bignum().

static VALUE big_lshift | ( | VALUE | x,
|  | unsigned long | shift
| ) |  |

static

Definition at line 3454 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, BITSPERDIG, i, len, RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by big_shift(), bigmul1_toom3(), rb_big_lshift(), and rb_big_rshift().

static VALUE big_lt | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1560 of file bignum.c.

References big_op().

Referenced by Init_Bignum().

static VALUE big_op | ( | VALUE | x,
|  | VALUE | y,
|  | int | op
| ) |  |

static

Definition at line 1474 of file bignum.c.

References FIX2INT, INT2FIX, isinf(), NIL_P, Qfalse, Qtrue, Qundef, rb_big2dbl(), rb_big_cmp(), rb_dbl_cmp(), rb_intern, rb_num_coerce_relop(), RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by big_ge(), big_gt(), big_le(), and big_lt().

static long big_real_len | ( | VALUE | x | ) |

static

Definition at line 1990 of file bignum.c.

References BDIGIT, BDIGITS, and RBIGNUM_LEN.

Referenced by bigmul1_balance(), bigmul1_karatsuba(), and bigmul1_toom3().

static VALUE big_rshift | ( | VALUE | x,
|  | unsigned long | shift
| ) |  |

static

Definition at line 3520 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGLO, bignew, BIGUP, BITSPERDIG, get2comp(), i, INT2FIX, rb_big_clone(), RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by big_shift(), rb_big_lshift(), and rb_big_rshift().

static VALUE big_shift | ( | VALUE | x,
|  | long | n
| ) |  |

static

Definition at line 2935 of file bignum.c.

References big_lshift(), and big_rshift().

Referenced by big_fdiv().

static VALUE big_sparse_p | ( | VALUE | x | ) |

inline static

Definition at line 2492 of file bignum.c.

References BDIGITS, Qfalse, Qtrue, rb_genrand_ulong_limited(), and RBIGNUM_LEN.

Referenced by bigmul0().

static void big_split | ( | VALUE | v,
|  | long | n,
|  | volatile VALUE * | ph,
|  | volatile VALUE * | pl
| ) |  |

static

Definition at line 2088 of file bignum.c.

References BDIGIT, BDIGITS, bignew, MEMCPY, rb_uint2big(), and RBIGNUM_LEN.

Referenced by big_split3(), and bigmul1_karatsuba().

static void big_split3 | ( | VALUE | v,
|  | long | n,
|  | volatile VALUE * | p0,
|  | volatile VALUE * | p1,
|  | volatile VALUE * | p2
| ) |  |

static

Definition at line 2267 of file bignum.c.

References big_split(), and bigtrunc().

Referenced by bigmul1_toom3().

static VALUE bigadd | ( | VALUE | x,
|  | VALUE | y,
|  | int | sign
| ) |  |

static

Definition at line 1889 of file bignum.c.

References BDIGITS, bigadd_core(), bignew, bigsub(), len, RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by bigdivmod(), bigmul1_toom3(), rb_big_minus(), and rb_big_plus().

static void bigadd_core | ( | BDIGIT * | xds,
|  | long | xn,
|  | BDIGIT * | yds,
|  | long | yn,
|  | BDIGIT * | zds,
|  | long | zn
| ) |  |

static

Definition at line 1855 of file bignum.c.

References assert, BDIGIT, BDIGIT_DBL, BIGDN, BIGLO, and i.

Referenced by bigadd(), bigmul1_balance(), bigmul1_karatsuba(), and bigmul1_toom3().

static VALUE bigadd_int | ( | VALUE | x,
|  | long | y
| ) |  |

static

Definition at line 1802 of file bignum.c.

References assert, BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), i, RB_GC_GUARD, RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by rb_big_minus(), and rb_big_plus().

static VALUE bigand_int | ( | VALUE | x,
|  | long | y
| ) |  |

static

Definition at line 3120 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), get2comp(), i, INT2FIX, LONG2NUM, RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by rb_big_and().

static void bigdivmod | ( | VALUE | x,
|  | VALUE | y,
|  | volatile VALUE * | divp,
|  | volatile VALUE * | modp
| ) |  |

static

Definition at line 2747 of file bignum.c.

References bigadd(), bigdivrem(), BIGZEROP, mod, rb_int2big(), and RBIGNUM_SIGN.

Referenced by big2str_karatsuba(), rb_big_divide(), rb_big_divmod(), and rb_big_modulo().

static VALUE bigdivrem | ( | VALUE | x,
|  | VALUE | y,
|  | volatile VALUE * | divp,
|  | volatile VALUE * | modp
| ) |  |

static

Definition at line 2631 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, bigdivrem1(), BIGDN, BIGLO, bignew, BIGUP, BIGZEROP, BITSPERDIG, i, big_div_struct::nx, big_div_struct::ny, Qfalse, Qnil, rb_big_clone(), rb_big_stop(), RB_GC_GUARD, rb_int2big(), rb_num_zerodiv(), rb_thread_blocking_region(), rb_uint2big(), RBIGNUM_LEN, RBIGNUM_SET_LEN, RBIGNUM_SET_SIGN, RBIGNUM_SIGN, big_div_struct::stop, big_div_struct::yds, and big_div_struct::zds.

Referenced by big_fdiv(), bigdivmod(), bigmul1_toom3(), and rb_big_remainder().

static VALUE bigdivrem1 | ( | void * | ptr | ) |

static

Definition at line 2579 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGIT_DBL_SIGNED, BIGDN, BIGLO, BIGRAD, BIGUP, i, big_div_struct::nx, big_div_struct::ny, Qnil, big_div_struct::stop, big_div_struct::yds, and big_div_struct::zds.

Referenced by bigdivrem().

static VALUE bigfixize | ( | VALUE | x | ) |

inline static

Definition at line 242 of file bignum.c.

References BDIGIT, BDIGITS, BIGUP, INT2FIX, len, long, LONG2FIX, NEGFIXABLE, POSFIXABLE, RBIGNUM_LEN, RBIGNUM_SIGN, and SIZEOF_BDIGITS.

Referenced by bignorm().

static void biglsh_bang | ( | BDIGIT * | xds,
|  | long | xn,
|  | unsigned long | shift
| ) |  |

static

Definition at line 2215 of file bignum.c.

References BDIGIT, BITSPERDIG, i, and MEMZERO.

Referenced by bigmul1_toom3().

static VALUE bigmul0 | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2504 of file bignum.c.

References assert, big_sparse_p(), bigmul1_balance(), bigmul1_karatsuba(), bigmul1_normal(), bigmul1_single(), bigmul1_toom3(), bigsqr_fast(), KARATSUBA_MUL_DIGITS, RBIGNUM_LEN, and TOOM3_MUL_DIGITS.

Referenced by bigmul1_balance(), bigmul1_karatsuba(), bigmul1_toom3(), bigsqr(), rb_big_mul(), and rb_big_pow().

static VALUE bigmul1_balance | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2051 of file bignum.c.

References assert, BDIGIT, BDIGITS, big_real_len(), bigadd_core(), bigmul0(), bignew, i, MEMCPY, RBIGNUM_LEN, RBIGNUM_SET_LEN, and RBIGNUM_SIGN.

Referenced by bigmul0().

static VALUE bigmul1_karatsuba | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2120 of file bignum.c.

References BDIGIT, BDIGITS, big_real_len(), big_split(), bigadd_core(), bigmul0(), bignew, bigsub_core(), BIGZEROP, i, MEMCPY, Qundef, RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by bigmul0().

static VALUE bigmul1_normal | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2017 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, i, rb_thread_check_ints(), RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by bigmul0().

static VALUE bigmul1_single | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1999 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, and RBIGNUM_SIGN.

Referenced by bigmul0().

static VALUE bigmul1_toom3 | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2284 of file bignum.c.

References assert, BDIGIT, BDIGITS, big_lshift(), big_real_len(), big_split3(), big_three, bigadd(), bigadd_core(), bigdivrem(), biglsh_bang(), bigmul0(), bignew, bignorm(), BIGRAD_HALF, bigrsh_bang(), bigsub(), bigtrunc(), MEMCPY, MEMZERO, NULL, Qnil, rb_big_resize(), RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by bigmul0().

static VALUE bignew_1 | ( | VALUE | klass,
|  | long | len,
|  | int | sign
| ) |  |

static

Definition at line 163 of file bignum.c.

References ALLOC_N, BDIGIT, len, NEWOBJ, OBJSETUP, RBASIC, RBIGNUM, RBIGNUM_EMBED_FLAG, RBIGNUM_EMBED_LEN_MAX, RBIGNUM_SET_LEN, RBIGNUM_SET_SIGN, and T_BIGNUM.

Referenced by rb_big_clone().

static VALUE bignorm | ( | VALUE | x | ) |

static

Definition at line 270 of file bignum.c.

References bigfixize(), bigtrunc(), FIXNUM_P, T_BIGNUM, and TYPE.

Referenced by bigadd_int(), bigand_int(), bigmul1_toom3(), bigor_int(), bigsub_int(), bigxor_int(), rb_big_and(), rb_big_divide(), rb_big_divmod(), rb_big_lshift(), rb_big_minus(), rb_big_modulo(), rb_big_mul(), rb_big_neg(), rb_big_norm(), rb_big_or(), rb_big_plus(), rb_big_pow(), rb_big_remainder(), rb_big_rshift(), rb_big_uminus(), rb_big_unpack(), rb_big_xor(), rb_cstr_to_inum(), rb_dbl2big(), and rb_quad_unpack().

static VALUE bigor_int | ( | VALUE | x,
|  | long | y
| ) |  |

static

Definition at line 3219 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), BIGRAD, get2comp(), i, RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by rb_big_or().

static void bigrsh_bang | ( | BDIGIT * | xds,
|  | long | xn,
|  | unsigned long | shift
| ) |  |

static

Definition at line 2241 of file bignum.c.

References BDIGIT, BITSPERDIG, i, and MEMZERO.

Referenced by bigmul1_toom3().

static VALUE bigsqr | ( | VALUE | x | ) |

static

Definition at line 3037 of file bignum.c.

References bigmul0(), and bigtrunc().

Referenced by power_cache_get_power(), power_cache_get_power0(), and rb_big_pow().

static VALUE bigsqr_fast | ( | VALUE | x | ) |

static

Definition at line 2454 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, i, len, RBIGNUM_LEN, and v.

Referenced by bigmul0().

static VALUE bigsub | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1714 of file bignum.c.

References BDIGIT, BDIGITS, bignew, bigsub_core(), and RBIGNUM_LEN.

Referenced by bigadd(), bigmul1_toom3(), and bigsub_int().

static void bigsub_core | ( | BDIGIT * | xds,
|  | long | xn,
|  | BDIGIT * | yds,
|  | long | yn,
|  | BDIGIT * | zds,
|  | long | zn
| ) |  |

static

Definition at line 1688 of file bignum.c.

References assert, BDIGIT_DBL_SIGNED, BIGDN, BIGLO, and i.

Referenced by bigmul1_karatsuba(), and bigsub().

static VALUE bigsub_int | ( | VALUE | x,
|  | long | y0
| ) |  |

static

Definition at line 1750 of file bignum.c.

References BDIGIT, BDIGIT_DBL_SIGNED, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), bigsub(), i, RB_GC_GUARD, rb_int2big(), RBIGNUM_LEN, RBIGNUM_SET_SIGN, and RBIGNUM_SIGN.

Referenced by rb_big_minus(), and rb_big_plus().

static VALUE bigtrunc | ( | VALUE | x | ) |

inline static

Definition at line 228 of file bignum.c.

References BDIGIT, BDIGITS, len, rb_big_resize(), and RBIGNUM_LEN.

Referenced by big2dbl(), big_fdiv(), big_split3(), bigmul1_toom3(), bignorm(), bigsqr(), rb_big_aref(), and rb_big_pow().

static VALUE bigxor_int | ( | VALUE | x,
|  | long | y
| ) |  |

static

Definition at line 3311 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), get2comp(), i, RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by rb_big_xor().

static int bigzero_p | ( | VALUE | x | ) |

static

Definition at line 75 of file bignum.c.

References BDIGIT, BDIGITS, i, and RBIGNUM_LEN.

static VALUE bit_coerce | ( | VALUE | x | ) |

inline static

Definition at line 3108 of file bignum.c.

References FIXNUM_P, rb_eTypeError, rb_raise(), rb_to_int(), T_BIGNUM, T_FLOAT, and TYPE.

Referenced by rb_big_and(), rb_big_or(), and rb_big_xor().

static int ceil_log2 | ( | register unsigned long | x | ) |

inline static

Definition at line 922 of file bignum.c.

References floor_log2(), and POW2_P.

Referenced by power_cache_get_power().

static VALUE check_shiftdown | ( | VALUE | y,
|  | VALUE | x
| ) |  |

static

Definition at line 3406 of file bignum.c.

References INT2FIX, Qnil, RBIGNUM_LEN, RBIGNUM_SIGN, and SIZEOF_BDIGITS.

Referenced by rb_big_lshift(), and rb_big_rshift().

static VALUE dbl2big | ( | double | d | ) |

static

Definition at line 1280 of file bignum.c.

References BDIGIT, BDIGITS, bignew, BIGRAD, i, isinf(), isnan, POSFIXABLE, rb_eFloatDomainError, and rb_raise().

Referenced by big_fdiv(), and rb_dbl2big().

static int floor_log2 | ( | register unsigned long | x | ) |

inline static

Definition at line 908 of file bignum.c.

References ones().

Referenced by ceil_log2().

static void get2comp | ( | VALUE | x | ) |

static

Definition at line 200 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, i, rb_big_resize(), and RBIGNUM_LEN.

Referenced by big_rshift(), bigand_int(), bigor_int(), bigxor_int(), rb_big_2comp(), rb_big_and(), rb_big_neg(), rb_big_or(), rb_big_unpack(), and rb_big_xor().

void Init_Bignum | ( | void |  | ) |

Definition at line 3748 of file bignum.c.

References big_ge(), big_gt(), big_le(), big_lt(), big_three, power_cache_init(), rb_big_abs(), rb_big_and(), rb_big_aref(), rb_big_cmp(), rb_big_coerce(), rb_big_div(), rb_big_divmod(), rb_big_eq(), rb_big_eql(), rb_big_even_p(), rb_big_fdiv(), rb_big_hash(), rb_big_idiv(), rb_big_lshift(), rb_big_minus(), rb_big_modulo(), rb_big_mul(), rb_big_neg(), rb_big_odd_p(), rb_big_or(), rb_big_plus(), rb_big_pow(), rb_big_remainder(), rb_big_rshift(), rb_big_size(), rb_big_to_f(), rb_big_to_s(), rb_big_uminus(), rb_big_xor(), rb_cBignum, rb_cInteger, rb_define_class(), rb_define_method(), rb_gc_register_mark_object(), and rb_uint2big().

static unsigned long next_pow2 | ( | register unsigned long | x | ) |

inline static

Definition at line 894 of file bignum.c.

static int nlz | ( | BDIGIT | x | ) |

static

Definition at line 1318 of file bignum.c.

References BDIGIT, and BITSPERDIG.

Referenced by big2dbl().

static int ones | ( | register unsigned long | x | ) |

inline static

Definition at line 868 of file bignum.c.

References MASK_0f, MASK_33, and MASK_55.

Referenced by floor_log2().

static VALUE power_cache_get_power | ( | int | base,
|  | long | n1,
|  | long * | m1
| ) |  |

static

Definition at line 957 of file bignum.c.

References bigsqr(), ceil_log2(), i, KARATSUBA_DIGITS, LOG2_KARATSUBA_DIGITS, MAX_BIG2STR_TABLE_ENTRIES, power_cache_get_power0(), and rb_bug().

Referenced by big2str_karatsuba().

static VALUE power_cache_get_power0 | ( | int | base,
|  | int | i
| ) |  |

inline static

Definition at line 945 of file bignum.c.

References bigsqr(), i, INT2FIX, KARATSUBA_DIGITS, NIL_P, rb_big_pow(), rb_gc_register_mark_object(), and rb_int2big().

Referenced by power_cache_get_power().

static void power_cache_init | ( | void |  | ) |

static

Definition at line 934 of file bignum.c.

References i, MAX_BIG2STR_TABLE_ENTRIES, and Qnil.

Referenced by Init_Bignum().

static int quad_buf_complement | ( | char * | buf,
|  | size_t | len
| ) |  |

static

Definition at line 510 of file bignum.c.

References i, and len.

Referenced by rb_quad_pack(), and rb_quad_unpack().

double rb_big2dbl | ( | VALUE | x | ) |

Definition at line 1388 of file bignum.c.

References big2dbl(), isinf(), and rb_warning().

Referenced by big_op(), flo_cmp(), flo_div(), flo_divmod(), flo_eq(), flo_ge(), flo_gt(), flo_le(), flo_lt(), flo_minus(), flo_mod(), flo_mul(), flo_plus(), flo_pow(), int_pair_to_real_inclusive(), ole_val2ptr_variant(), ole_val2variant(), rb_big_cmp(), rb_big_divide(), rb_big_eq(), rb_big_fdiv(), rb_big_minus(), rb_big_mul(), rb_big_plus(), rb_big_pow(), rb_big_to_f(), and rb_Float().

SIGNED_VALUE rb_big2long | ( | VALUE | x | ) |

Definition at line 1222 of file bignum.c.

References big2ulong(), LONG_MIN, rb_eRangeError, rb_raise(), RBIGNUM_SIGN, SIGNED_VALUE, and TRUE.

Referenced by rb_num2long().

VALUE rb_big2str | ( | VALUE | x,
|  | int | base
| ) |  |

Definition at line 1142 of file bignum.c.

References rb_big2str0().

Referenced by GetVpValueWithPrec(), rb_big_to_s(), and rb_str_format().

VALUE rb_big2str0 | ( | VALUE | x,
|  | int | base,
|  | int | trim
| ) |  |

Definition at line 1096 of file bignum.c.

References big2str_find_n1(), big2str_karatsuba(), big2str_orig(), BIGZEROP, FIXNUM_P, KARATSUBA_DIGITS, len, rb_big_clone(), rb_big_resize(), rb_eArgError, rb_fix2str(), rb_raise(), rb_str_resize(), rb_usascii_str_new(), rb_usascii_str_new2(), RBIGNUM_SET_SIGN, RBIGNUM_SIGN, and RSTRING_PTR.

Referenced by rb_big2str(), and rb_str_format().

VALUE rb_big2ulong | ( | VALUE | x | ) |

Definition at line 1208 of file bignum.c.

References big2ulong(), rb_eRangeError, rb_raise(), RBIGNUM_SIGN, SIGNED_VALUE, and TRUE.

Referenced by rb_gzfile_set_mtime(), rb_num2ulong(), and rb_num_to_uint().

VALUE rb_big2ulong_pack | ( | VALUE | x | ) |

Definition at line 1198 of file bignum.c.

References big2ulong(), FALSE, RBIGNUM_SIGN, and SIGNED_VALUE.

Referenced by rb_dlcfunc_call().

void rb_big_2comp | ( | VALUE | x | ) |

Definition at line 222 of file bignum.c.

References get2comp().

Referenced by rb_str_format().

static VALUE rb_big_abs | ( | VALUE | x | ) |

static

Definition at line 3670 of file bignum.c.

References rb_big_clone(), RBIGNUM_SET_SIGN, and RBIGNUM_SIGN.

Referenced by Init_Bignum().

VALUE rb_big_and | ( | VALUE | xx,
|  | VALUE | yy
| ) |  |

Definition at line 3171 of file bignum.c.

References BDIGIT, BDIGITS, bigand_int(), bignew, bignorm(), bit_coerce(), FIX2LONG, FIXNUM_P, get2comp(), i, rb_big_clone(), RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by fix_and(), and Init_Bignum().

static VALUE rb_big_aref | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 3582 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, big2ulong(), BIGDN, bigtrunc(), BITSPERDIG, DIGSPERLONG, FALSE, i, INT2FIX, NUM2LONG(), RBIGNUM_LEN, RBIGNUM_SIGN, shift(), T_BIGNUM, and TYPE.

Referenced by Init_Bignum().

VALUE rb_big_clone | ( | VALUE | x | ) |

Definition at line 189 of file bignum.c.

References BDIGIT, BDIGITS, bignew_1(), CLASS_OF, len, MEMCPY, RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by big_rshift(), bigdivrem(), limited_big_rand(), rand_int(), rb_big2str0(), rb_big_abs(), rb_big_and(), rb_big_neg(), rb_big_or(), rb_big_uminus(), rb_big_xor(), and rb_str_format().

VALUE rb_big_cmp | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 1428 of file bignum.c.

References BDIGIT, BDIGITS, FIX2LONG, INT2FIX, isinf(), rb_big2dbl(), rb_dbl_cmp(), rb_int2big(), rb_intern, rb_num_coerce_cmp(), RBIGNUM_LEN, RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by big_op(), fix_cmp(), fix_ge(), fix_gt(), fix_le(), fix_lt(), and Init_Bignum().

static VALUE rb_big_coerce | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 3644 of file bignum.c.

References FIX2LONG, FIXNUM_P, Qnil, rb_assoc_new(), rb_eTypeError, rb_int2big(), rb_obj_classname(), rb_raise(), T_BIGNUM, and TYPE.

Referenced by Init_Bignum().

VALUE rb_big_div | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 2804 of file bignum.c.

References rb_big_divide().

Referenced by fix_divide(), and Init_Bignum().

static VALUE rb_big_divide | ( | VALUE | x,
|  | VALUE | y,
|  | ID | op
| ) |  |

static

Definition at line 2763 of file bignum.c.

References bigdivmod(), bignorm(), DBL2NUM, div, FIX2LONG, rb_big2dbl(), rb_dbl2big(), rb_int2big(), rb_num_coerce_bin(), RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by rb_big_div(), and rb_big_idiv().

VALUE rb_big_divmod | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 2890 of file bignum.c.

References bigdivmod(), bignorm(), div, FIX2LONG, mod, rb_assoc_new(), rb_int2big(), rb_intern, rb_num_coerce_bin(), T_BIGNUM, T_FIXNUM, and TYPE.

Referenced by fix_divmod(), Init_Bignum(), and pack_pack().

VALUE rb_big_eq | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 1591 of file bignum.c.

References BDIGIT, BDIGITS, FIX2LONG, isinf(), isnan, MEMCMP, Qfalse, Qtrue, rb_big2dbl(), rb_equal(), rb_int2big(), RBIGNUM_LEN, RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by fix_equal(), and Init_Bignum().

static VALUE rb_big_eql | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 1629 of file bignum.c.

References BDIGIT, BDIGITS, MEMCMP, Qfalse, Qtrue, RBIGNUM_LEN, RBIGNUM_SIGN, T_BIGNUM, and TYPE.

Referenced by Init_Bignum().

static VALUE rb_big_even_p | ( | VALUE | num | ) |

static

Definition at line 3721 of file bignum.c.

References BDIGITS, Qfalse, and Qtrue.

Referenced by Init_Bignum().

VALUE rb_big_fdiv | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 3004 of file bignum.c.

References big2dbl(), big_fdiv(), DBL2NUM, FIX2LONG, isinf(), isnan, rb_big2dbl(), rb_intern, rb_num_coerce_bin(), RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by fix_fdiv(), and Init_Bignum().

static VALUE rb_big_hash | ( | VALUE | x | ) |

static

Definition at line 3631 of file bignum.c.

References BDIGIT, BDIGITS, hash(), INT2FIX, rb_memhash(), RBIGNUM_LEN, and RBIGNUM_SIGN.

Referenced by Init_Bignum().

VALUE rb_big_idiv | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 2817 of file bignum.c.

References rb_big_divide(), and rb_intern.

Referenced by Init_Bignum().

VALUE rb_big_lshift | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 3423 of file bignum.c.

References big2ulong(), big_lshift(), big_rshift(), bignorm(), check_shiftdown(), FIX2LONG, FIXNUM_P, NIL_P, rb_to_int(), RBIGNUM_SIGN, shift(), T_BIGNUM, TRUE, and TYPE.

Referenced by fix_lshift(), Init_Bignum(), and rb_fix_lshift().

VALUE rb_big_minus | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 1960 of file bignum.c.

References bigadd(), bigadd_int(), bignorm(), bigsub_int(), DBL2NUM, FIX2LONG, rb_big2dbl(), rb_num_coerce_bin(), RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by fix_minus(), Init_Bignum(), rand_int(), rand_range(), sub(), and wsub().

VALUE rb_big_modulo | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 2832 of file bignum.c.

References bigdivmod(), bignorm(), FIX2LONG, rb_int2big(), rb_num_coerce_bin(), T_BIGNUM, T_FIXNUM, and TYPE.

Referenced by fix_mod(), Init_Bignum(), and mod().

VALUE rb_big_mul | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 2552 of file bignum.c.

References bigmul0(), bignorm(), DBL2NUM, FIX2LONG, rb_big2dbl(), rb_int2big(), rb_num_coerce_bin(), RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by f_imul(), fix_mul(), Init_Bignum(), int_pair_to_real_inclusive(), int_pow(), mul(), pack_unpack(), and wmul().

static VALUE rb_big_neg | ( | VALUE | x | ) |

static

Definition at line 1668 of file bignum.c.

References BDIGIT, BDIGITS, bignorm(), get2comp(), i, INT2FIX, rb_big_clone(), RBIGNUM_LEN, RBIGNUM_SET_SIGN, RBIGNUM_SIGN, and SIGNED_VALUE.

Referenced by Init_Bignum().

VALUE rb_big_new | ( | long | len,
|  | int | sign
| ) |  |

Definition at line 183 of file bignum.c.

References bignew.

Referenced by int_pair_to_real_inclusive(), and mt_state().

VALUE rb_big_norm | ( | VALUE | x | ) |

Definition at line 279 of file bignum.c.

References bignorm().

Referenced by fix_aref(), limited_big_rand(), make_seed_value(), mt_state(), r_object0(), and rand_range().

static VALUE rb_big_odd_p | ( | VALUE | num | ) |

static

Definition at line 3705 of file bignum.c.

References BDIGITS, Qfalse, and Qtrue.

Referenced by Init_Bignum().

VALUE rb_big_or | ( | VALUE | xx,
|  | VALUE | yy
| ) |  |

Definition at line 3262 of file bignum.c.

References BDIGIT, BDIGITS, bignew, bignorm(), bigor_int(), BIGRAD, bit_coerce(), FIX2LONG, FIXNUM_P, get2comp(), i, rb_big_clone(), RBIGNUM_LEN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by fix_or(), and Init_Bignum().

void rb_big_pack | ( | VALUE | val,
|  | unsigned long * | buf,
|  | long | num_longs
| ) |  |

Definition at line 354 of file bignum.c.

References BDIGIT, BDIGITS, BITSPERDIG, DIGSPERLONG, FIX2LONG, FIXNUM_P, i, len, long, rb_to_int(), RBIGNUM_LEN, and RBIGNUM_NEGATIVE_P.

Referenced by pack_pack().

VALUE rb_big_plus | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 1923 of file bignum.c.

References bigadd(), bigadd_int(), bignorm(), bigsub_int(), DBL2NUM, FIX2LONG, rb_big2dbl(), rb_num_coerce_bin(), RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by add(), fix_plus(), Init_Bignum(), pack_unpack(), rand_range(), rb_random_int32(), and wadd().

VALUE rb_big_pow | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 3056 of file bignum.c.

References bigmul0(), bignorm(), bigsqr(), bigtrunc(), BIGZEROP, DBL2NUM, FIX2LONG, FIXNUM_MAX, INT2FIX, rb_big2dbl(), rb_complex_raw1, rb_funcall(), rb_intern, rb_num_coerce_bin(), rb_rational_raw1, rb_warn(), RBIGNUM_LEN, RBIGNUM_SIGN, RFLOAT_VALUE, round(), SIGNED_VALUE, SIZEOF_BDIGITS, T_BIGNUM, T_FIXNUM, T_FLOAT, and TYPE.

Referenced by fix_pow(), Init_Bignum(), int_pow(), and power_cache_get_power0().

static void rb_big_realloc | ( | VALUE | big,
|  | long | len
| ) |  |

static

Definition at line 122 of file bignum.c.

References ALLOC_N, BDIGIT, MEMCPY, RBASIC, RBIGNUM, RBIGNUM_EMBED_FLAG, RBIGNUM_EMBED_LEN_MAX, RBIGNUM_LEN, RBIGNUM_SET_LEN, REALLOC_N, and xfree().

Referenced by rb_big_resize().

static VALUE rb_big_remainder | ( | VALUE | x,
|  | VALUE | y
| ) |  |

static

Definition at line 2862 of file bignum.c.

References bigdivrem(), bignorm(), FIX2LONG, rb_int2big(), rb_intern, rb_num_coerce_bin(), T_BIGNUM, T_FIXNUM, and TYPE.

Referenced by Init_Bignum().

void rb_big_resize | ( | VALUE | big,
|  | long | len
| ) |  |

Definition at line 156 of file bignum.c.

References rb_big_realloc(), and RBIGNUM_SET_LEN.

Referenced by big2str_karatsuba(), bigmul1_toom3(), bigtrunc(), get2comp(), make_seed_value(), r_object0(), and rb_big2str0().

VALUE rb_big_rshift | ( | VALUE | x,
|  | VALUE | y
| ) |  |

Definition at line 3487 of file bignum.c.

References big2ulong(), big_lshift(), big_rshift(), bignorm(), check_shiftdown(), FIX2LONG, FIXNUM_P, NIL_P, rb_to_int(), RBIGNUM_SIGN, shift(), T_BIGNUM, TRUE, and TYPE.

Referenced by Init_Bignum(), int_pair_to_real_inclusive(), and rb_fix_rshift().

static VALUE rb_big_size | ( | VALUE | big | ) |

static

Definition at line 3692 of file bignum.c.

References LONG2FIX, RBIGNUM_LEN, and SIZEOF_BDIGITS.

Referenced by Init_Bignum().

static void rb_big_stop | ( | void * | ptr | ) |

static

Definition at line 2624 of file bignum.c.

References Qtrue, and big_div_struct::stop.

Referenced by bigdivrem().

static VALUE rb_big_to_f | ( | VALUE | x | ) |

static

Definition at line 1412 of file bignum.c.

References DBL2NUM, and rb_big2dbl().

Referenced by Init_Bignum().

static VALUE rb_big_to_s | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | x
| ) |  |

static

Definition at line 1162 of file bignum.c.

References NUM2INT, rb_big2str(), and rb_scan_args().

Referenced by Init_Bignum().

VALUE rb_big_uminus | ( | VALUE | x | ) |

Definition at line 1646 of file bignum.c.

References bignorm(), rb_big_clone(), RBIGNUM_SET_SIGN, and RBIGNUM_SIGN.

Referenced by Init_Bignum().

VALUE rb_big_unpack | ( | unsigned long * | buf,
|  | long | num_longs
| ) |  |

Definition at line 396 of file bignum.c.

References BDIGIT, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), DIGSPERLONG, get2comp(), i, INT2FIX, len, LONG2NUM, and RBIGNUM_SET_SIGN.

Referenced by pack_unpack().

VALUE rb_big_xor | ( | VALUE | xx,
|  | VALUE | yy
| ) |  |

Definition at line 3353 of file bignum.c.

References BDIGIT, BDIGITS, bignew, bignorm(), bigxor_int(), bit_coerce(), FIX2LONG, FIXNUM_P, get2comp(), i, rb_big_clone(), RBIGNUM_LEN, RBIGNUM_SET_SIGN, RBIGNUM_SIGN, and big_div_struct::zds.

Referenced by fix_xor(), and Init_Bignum().

int rb_bigzero_p | ( | VALUE | x | ) |

Definition at line 87 of file bignum.c.

References BIGZEROP.

Referenced by rand_int(), and rand_range().

int rb_cmpint | ( | VALUE | val,
|  | VALUE | a,
|  | VALUE | b
| ) |  |

Definition at line 93 of file bignum.c.

References BIGZEROP, FIX2LONG, FIXNUM_P, INT2FIX, NIL_P, rb_cmperr(), rb_funcall(), RBIGNUM_SIGN, RTEST, T_BIGNUM, and TYPE.

Referenced by cmp(), cmp_eq(), cmp_ge(), cmp_gt(), cmp_le(), cmp_lt(), flo_cmp(), max_by_i(), max_i(), max_ii(), min_by_i(), min_i(), min_ii(), minmax_by_i(), minmax_by_i_update(), minmax_i(), minmax_i_update(), minmax_ii(), minmax_ii_update(), r_le(), r_lt(), range_max(), range_min(), sort_1(), sort_2(), sort_by_cmp(), time_cmp(), and wcmp().

VALUE rb_cstr2inum | ( | const char * | str,
|  | int | base
| ) |  |

Definition at line 849 of file bignum.c.

References rb_cstr_to_inum().

Referenced by yaml_org_handler().

VALUE rb_cstr_to_inum | ( | const char * | str,
|  | int | base,
|  | int | badcheck
| ) |  |

Definition at line 564 of file bignum.c.

References bad, BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, bignorm(), BITSPERDIG, CHAR_BIT, conv_digit, i, INT2FIX, ISSPACE, len, long, LONG2FIX, POSFIXABLE, rb_eArgError, rb_invalid_str(), rb_raise(), rb_uint2big(), RBIGNUM_SET_SIGN, result, strlen(), and STRTOUL.

Referenced by asn1integer_to_num(), ossl_bn_to_i(), parser_yylex(), rb_cstr2inum(), rb_str_to_inum(), read_digits(), and tkstr_to_int().

VALUE rb_dbl2big | ( | double | d | ) |

Definition at line 1312 of file bignum.c.

References bignorm(), and dbl2big().

Referenced by case_when_optimizable_literal(), dbl2ival(), fix_divide(), flo_ceil(), flo_floor(), flo_truncate(), float_decode_internal(), nurat_div(), rb_big_divide(), rb_convert_to_integer(), and rb_str_format().

VALUE rb_int2big | ( | SIGNED_VALUE | n | ) |

Definition at line 306 of file bignum.c.

References neg, rb_uint2big(), and RBIGNUM_SET_SIGN.

Referenced by big_fdiv(), bigdivmod(), bigdivrem(), bigsub_int(), f_imul(), fix_cmp(), fix_divide(), fix_divmod(), fix_fdiv(), fix_ge(), fix_gt(), fix_le(), fix_lshift(), fix_lt(), fix_minus(), fix_mod(), fix_mul(), fix_pow(), int_pow(), power_cache_get_power0(), rb_big_cmp(), rb_big_coerce(), rb_big_divide(), rb_big_divmod(), rb_big_eq(), rb_big_modulo(), rb_big_mul(), rb_big_remainder(), rb_fix_lshift(), rb_fix_rshift(), rb_int2inum(), rb_quad_pack(), rb_str_format(), and w_object().

VALUE rb_int2inum | ( | SIGNED_VALUE | n | ) |

Definition at line 330 of file bignum.c.

References FIXABLE, LONG2FIX, and rb_int2big().

Referenced by gzfile_reader_rewind().

void rb_quad_pack | ( | char * | buf,
|  | VALUE | val
| ) |  |

Definition at line 524 of file bignum.c.

References BDIGITS, FIX2LONG, FIXNUM_P, len, quad_buf_complement(), QUAD_SIZE, rb_int2big(), rb_to_int(), RBIGNUM_LEN, RBIGNUM_NEGATIVE_P, and SIZEOF_BDIGITS.

VALUE rb_quad_unpack | ( | const char * | buf,
|  | int | sign
| ) |  |

Definition at line 546 of file bignum.c.

References BDIGITS, bignew, bignorm(), BNEG, quad_buf_complement(), QUAD_SIZE, RBIGNUM_SET_SIGN, and SIZEOF_BDIGITS.

VALUE rb_str2inum | ( | VALUE | str,
|  | int | base
| ) |  |

Definition at line 855 of file bignum.c.

References rb_str_to_inum().

Referenced by syck_resolver_transfer().

VALUE rb_str_to_inum | ( | VALUE | str,
|  | int | base,
|  | int | badcheck
| ) |  |

Definition at line 762 of file bignum.c.

References ALLOCV, ALLOCV_END, len, MEMCPY, p, rb_cstr_to_inum(), RSTRING_LEN, RSTRING_PTR, StringValue, StringValueCStr, and v.

Referenced by fun1(), obj2int(), obj2subsecx(), obj2vint(), rb_convert_to_integer(), rb_str2inum(), rb_str_format(), rb_str_hex(), rb_str_oct(), rb_str_to_i(), rb_str_upto(), and usec2subsecx().

VALUE rb_uint2big | ( | VALUE | n | ) |

Definition at line 285 of file bignum.c.

References BDIGIT, BDIGIT_DBL, BDIGITS, BIGDN, BIGLO, bignew, DIGSPERLONG, i, and RBIGNUM_SET_LEN.

Referenced by big_split(), bigdivrem(), Init_Bignum(), pack_pack(), pack_unpack(), rb_cstr_to_inum(), rb_int2big(), and rb_uint2inum().

VALUE rb_uint2inum | ( | VALUE | n | ) |

Definition at line 323 of file bignum.c.

References LONG2FIX, POSFIXABLE, and rb_uint2big().

Referenced by do_checksum(), rb_gzfile_crc(), rb_gzfile_total_in(), rb_gzfile_total_out(), rb_zlib_crc_table(), rb_zstream_adler(), rb_zstream_avail_out(), rb_zstream_total_in(), and rb_zstream_total_out().

## Variable Documentation

VALUE big2str_power_cache[35][MAX_BIG2STR_TABLE_ENTRIES]

static

Definition at line 931 of file bignum.c.

VALUE big_three = Qnil

static

Definition at line 26 of file bignum.c.

Referenced by bigmul1_toom3(), and Init_Bignum().

VALUE rb_cBignum

Definition at line 24 of file bignum.c.

Referenced by Init_Bignum(), Init_RandomSeed2(), k_bignum_p(), make_seed_value(), r_object0(), and syck_resolver_transfer().

const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz"

Definition at line 860 of file bignum.c.

Referenced by rb_fix2str().