Ruby 1.9.3p327(2012-11-10revision37606)
Defines | Functions | Variables
ext/bigdecimal/bigdecimal.c File Reference
#include "bigdecimal.h"
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <math.h>
Include dependency graph for bigdecimal.c:

Go to the source code of this file.

Defines

#define NDEBUG
#define ENTER(n)   volatile VALUE vStack[n];int iStack=0
#define PUSH(x)   vStack[iStack++] = (VALUE)(x);
#define SAVE(p)   PUSH(p->obj);
#define GUARD_OBJ(p, y)   {p=y;SAVE(p);}
#define BASE_FIG   RMPD_COMPONENT_FIGURES
#define BASE   RMPD_BASE
#define HALF_BASE   (BASE/2)
#define BASE1   (BASE/10)
#define DBLE_FIG   (DBL_DIG+1)
#define RBIGNUM_ZERO_P(x)
#define RRATIONAL_ZERO_P(x)
#define RRATIONAL_NEGATIVE_P(x)   RTEST(rb_funcall((x), '<', 1, INT2FIX(0)))
#define DoSomeOne(x, y, f)   rb_num_coerce_bin(x,y,f)
#define BigMath_exp(x, n)   BigMath_s_exp(rb_mBigMath, (x), (n))
#define BigMath_log(x, n)   BigMath_s_log(rb_mBigMath, (x), (n))
#define is_positive(x)   (!is_negative(x))
#define maxnr   100UL
#define MemCmp(x, y, z)   memcmp(x,y,z)
#define StrCmp(x, y)   strcmp(x,y)
#define rmpd_set_thread_local_exception_mode(mode)
#define rmpd_set_thread_local_precision_limit(limit)
#define RMPD_PRECISION_LIMIT_DEFAULT   ((size_t)0)
#define rmpd_set_thread_local_rounding_mode(mode)

Functions

static int bigzero_p (VALUE x)
static VALUE BigDecimal_version (VALUE self)
static unsigned short VpGetException (void)
static void VpSetException (unsigned short f)
static void VpInternalRound (Real *c, size_t ixDigit, BDIGIT vPrev, BDIGIT v)
static int VpLimitRound (Real *c, size_t ixDigit)
static RealVpDup (Real const *const x)
static void BigDecimal_delete (void *pv)
static size_t BigDecimal_memsize (const void *ptr)
static int is_kind_of_BigDecimal (VALUE const v)
static VALUE ToValue (Real *p)
 NORETURN (static void cannot_be_coerced_into_BigDecimal(VALUE, VALUE))
static void cannot_be_coerced_into_BigDecimal (VALUE exc_class, VALUE v)
static VALUE BigDecimal_div2 (int, VALUE *, VALUE)
static RealGetVpValueWithPrec (VALUE v, long prec, int must)
static RealGetVpValue (VALUE v, int must)
static VALUE BigDecimal_double_fig (VALUE self)
static VALUE BigDecimal_prec (VALUE self)
static VALUE BigDecimal_hash (VALUE self)
static VALUE BigDecimal_dump (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_load (VALUE self, VALUE str)
static unsigned short check_rounding_mode (VALUE const v)
static VALUE BigDecimal_mode (int argc, VALUE *argv, VALUE self)
static size_t GetAddSubPrec (Real *a, Real *b)
static SIGNED_VALUE GetPositiveInt (VALUE v)
VP_EXPORT RealVpNewRbClass (size_t mx, const char *str, VALUE klass)
VP_EXPORT RealVpCreateRbObject (size_t mx, const char *str)
static VALUE BigDecimal_IsNaN (VALUE self)
static VALUE BigDecimal_IsInfinite (VALUE self)
static VALUE BigDecimal_IsFinite (VALUE self)
static void BigDecimal_check_num (Real *p)
static VALUE BigDecimal_split (VALUE self)
static VALUE BigDecimal_to_i (VALUE self)
static VALUE BigDecimal_to_f (VALUE self)
static VALUE BigDecimal_to_r (VALUE self)
static VALUE BigDecimal_coerce (VALUE self, VALUE other)
static VALUE BigDecimal_uplus (VALUE self)
static VALUE BigDecimal_add (VALUE self, VALUE r)
static VALUE BigDecimal_sub (VALUE self, VALUE r)
static VALUE BigDecimalCmp (VALUE self, VALUE r, char op)
static VALUE BigDecimal_zero (VALUE self)
static VALUE BigDecimal_nonzero (VALUE self)
static VALUE BigDecimal_comp (VALUE self, VALUE r)
static VALUE BigDecimal_eq (VALUE self, VALUE r)
static VALUE BigDecimal_lt (VALUE self, VALUE r)
static VALUE BigDecimal_le (VALUE self, VALUE r)
static VALUE BigDecimal_gt (VALUE self, VALUE r)
static VALUE BigDecimal_ge (VALUE self, VALUE r)
static VALUE BigDecimal_neg (VALUE self)
static VALUE BigDecimal_mult (VALUE self, VALUE r)
static VALUE BigDecimal_divide (Real **c, Real **res, Real **div, VALUE self, VALUE r)
static VALUE BigDecimal_div (VALUE self, VALUE r)
static VALUE BigDecimal_DoDivmod (VALUE self, VALUE r, Real **div, Real **mod)
static VALUE BigDecimal_mod (VALUE self, VALUE r)
static VALUE BigDecimal_divremain (VALUE self, VALUE r, Real **dv, Real **rv)
static VALUE BigDecimal_remainder (VALUE self, VALUE r)
static VALUE BigDecimal_divmod (VALUE self, VALUE r)
static VALUE BigDecimal_add2 (VALUE self, VALUE b, VALUE n)
static VALUE BigDecimal_sub2 (VALUE self, VALUE b, VALUE n)
static VALUE BigDecimal_mult2 (VALUE self, VALUE b, VALUE n)
static VALUE BigDecimal_abs (VALUE self)
static VALUE BigDecimal_sqrt (VALUE self, VALUE nFig)
static VALUE BigDecimal_fix (VALUE self)
static VALUE BigDecimal_round (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_truncate (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_frac (VALUE self)
static VALUE BigDecimal_floor (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_ceil (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_to_s (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_exponent (VALUE self)
static VALUE BigDecimal_inspect (VALUE self)
static VALUE BigMath_s_exp (VALUE, VALUE, VALUE)
static VALUE BigMath_s_log (VALUE, VALUE, VALUE)
static int is_integer (VALUE x)
static int is_negative (VALUE x)
static int is_zero (VALUE x)
static int is_one (VALUE x)
static int is_even (VALUE x)
static VALUE rmpd_power_by_big_decimal (Real const *x, Real const *exp, ssize_t const n)
static VALUE BigDecimal_power (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_power_op (VALUE self, VALUE exp)
static VALUE BigDecimal_new (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_global_new (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_limit (int argc, VALUE *argv, VALUE self)
static VALUE BigDecimal_sign (VALUE self)
static VALUE BigDecimal_save_exception_mode (VALUE self)
static VALUE BigDecimal_save_rounding_mode (VALUE self)
static VALUE BigDecimal_save_limit (VALUE self)
void Init_bigdecimal (void)
static int VpIsDefOP (Real *c, Real *a, Real *b, int sw)
static int AddExponent (Real *a, SIGNED_VALUE n)
static BDIGIT VpAddAbs (Real *a, Real *b, Real *c)
static BDIGIT VpSubAbs (Real *a, Real *b, Real *c)
static size_t VpSetPTR (Real *a, Real *b, Real *c, size_t *a_pos, size_t *b_pos, size_t *c_pos, BDIGIT *av, BDIGIT *bv)
static int VpNmlz (Real *a)
static void VpFormatSt (char *psz, size_t fFmt)
static int VpRdup (Real *m, size_t ind_m)
VP_EXPORT void * VpMemAlloc (size_t mb)
VP_EXPORT void VpFree (Real *pv)
VP_EXPORT size_t VpGetPrecLimit (void)
VP_EXPORT size_t VpSetPrecLimit (size_t n)
VP_EXPORT unsigned short VpGetRoundMode (void)
VP_EXPORT int VpIsRoundMode (unsigned short n)
VP_EXPORT unsigned short VpSetRoundMode (unsigned short n)
static double Zero (void)
static double One (void)
VP_EXPORT double VpGetDoubleNaN (void)
VP_EXPORT double VpGetDoublePosInf (void)
VP_EXPORT double VpGetDoubleNegInf (void)
VP_EXPORT double VpGetDoubleNegZero (void)
VP_EXPORT int VpException (unsigned short f, const char *str, int always)
VP_EXPORT size_t VpNumOfChars (Real *vp, const char *pszFmt)
VP_EXPORT size_t VpInit (BDIGIT BaseVal)
VP_EXPORT RealVpOne (void)
VP_EXPORT RealVpAlloc (size_t mx, const char *szVal)
VP_EXPORT size_t VpAsgn (Real *c, Real *a, int isw)
VP_EXPORT size_t VpAddSub (Real *c, Real *a, Real *b, int operation)
VP_EXPORT size_t VpMult (Real *c, Real *a, Real *b)
VP_EXPORT size_t VpDivd (Real *c, Real *r, Real *a, Real *b)
VP_EXPORT int VpComp (Real *a, Real *b)
VP_EXPORT ssize_t VpExponent10 (Real *a)
VP_EXPORT void VpSzMantissa (Real *a, char *psz)
VP_EXPORT int VpToSpecialString (Real *a, char *psz, int fPlus)
VP_EXPORT void VpToString (Real *a, char *psz, size_t fFmt, int fPlus)
VP_EXPORT void VpToFString (Real *a, char *psz, size_t fFmt, int fPlus)
VP_EXPORT int VpCtoV (Real *a, const char *int_chr, size_t ni, const char *frac, size_t nf, const char *exp_chr, size_t ne)
VP_EXPORT int VpVtoD (double *d, SIGNED_VALUE *e, Real *m)
VP_EXPORT void VpDtoV (Real *m, double d)
VP_EXPORT int VpSqrt (Real *y, Real *x)
VP_EXPORT int VpMidRound (Real *y, unsigned short f, ssize_t nf)
VP_EXPORT int VpLeftRound (Real *y, unsigned short f, ssize_t nf)
VP_EXPORT int VpActiveRound (Real *y, Real *x, unsigned short f, ssize_t nf)
VP_EXPORT void VpFrac (Real *y, Real *x)
VP_EXPORT int VpPower (Real *y, Real *x, SIGNED_VALUE n)

Variables

VALUE rb_cBigDecimal
VALUE rb_mBigMath
static ID id_BigDecimal_exception_mode
static ID id_BigDecimal_rounding_mode
static ID id_BigDecimal_precision_limit
static ID id_up
static ID id_down
static ID id_truncate
static ID id_half_up
static ID id_default
static ID id_half_down
static ID id_half_even
static ID id_banker
static ID id_ceiling
static ID id_ceil
static ID id_floor
static ID id_to_r
static ID id_eq
static const rb_data_type_t BigDecimal_data_type
static RealVpConstOne
static RealVpPt5
volatile const double gZero_ABCED9B1_CE73__00400511F31D = 0.0
volatile const double gOne_ABCED9B4_CE73__00400511F31D = 1.0

Define Documentation

#define BASE   RMPD_BASE
#define BASE1   (BASE/10)
#define BASE_FIG   RMPD_COMPONENT_FIGURES
#define BigMath_exp (   x,
 
)    BigMath_s_exp(rb_mBigMath, (x), (n))

Definition at line 1901 of file bigdecimal.c.

Referenced by rmpd_power_by_big_decimal().

#define BigMath_log (   x,
 
)    BigMath_s_log(rb_mBigMath, (x), (n))

Definition at line 1902 of file bigdecimal.c.

Referenced by rmpd_power_by_big_decimal().

#define DBLE_FIG   (DBL_DIG+1)

Definition at line 75 of file bigdecimal.c.

Referenced by VpInit(), VpSqrt(), and VpVtoD().

#define DoSomeOne (   x,
  y,
 
)    rb_num_coerce_bin(x,y,f)
#define ENTER (   n)    volatile VALUE vStack[n];int iStack=0
#define GUARD_OBJ (   p,
 
)    {p=y;SAVE(p);}
#define HALF_BASE   (BASE/2)

Definition at line 71 of file bigdecimal.c.

Referenced by VpInit().

#define is_positive (   x)    (!is_negative(x))

Definition at line 1925 of file bigdecimal.c.

Referenced by BigDecimal_power().

#define maxnr   100UL

Definition at line 3047 of file bigdecimal.c.

Referenced by VpSqrt().

#define MemCmp (   x,
  y,
 
)    memcmp(x,y,z)

Definition at line 3051 of file bigdecimal.c.

#define NDEBUG

Definition at line 23 of file bigdecimal.c.

#define PUSH (   x)    vStack[iStack++] = (VALUE)(x);

Definition at line 64 of file bigdecimal.c.

#define RBIGNUM_ZERO_P (   x)
Value:
(RBIGNUM_LEN(x) == 0 || \
                            (RBIGNUM_DIGITS(x)[0] == 0 && \
                             (RBIGNUM_LEN(x) == 1 || bigzero_p(x))))

Definition at line 79 of file bigdecimal.c.

Referenced by BigMath_s_log().

#define RMPD_PRECISION_LIMIT_DEFAULT   ((size_t)0)

Definition at line 3143 of file bigdecimal.c.

Referenced by VpGetPrecLimit().

#define rmpd_set_thread_local_exception_mode (   mode)
Value:

Definition at line 3104 of file bigdecimal.c.

Referenced by VpGetException(), and VpSetException().

#define rmpd_set_thread_local_precision_limit (   limit)
Value:

Definition at line 3137 of file bigdecimal.c.

Referenced by VpGetPrecLimit(), and VpSetPrecLimit().

#define rmpd_set_thread_local_rounding_mode (   mode)
Value:

Definition at line 3174 of file bigdecimal.c.

Referenced by VpGetRoundMode(), and VpSetRoundMode().

#define RRATIONAL_NEGATIVE_P (   x)    RTEST(rb_funcall((x), '<', 1, INT2FIX(0)))

Definition at line 102 of file bigdecimal.c.

Referenced by BigMath_s_log().

#define RRATIONAL_ZERO_P (   x)
Value:
(FIXNUM_P(RRATIONAL(x)->num) && \
                              FIX2LONG(RRATIONAL(x)->num) == 0)

Definition at line 97 of file bigdecimal.c.

Referenced by BigMath_s_log().

#define SAVE (   p)    PUSH(p->obj);
#define StrCmp (   x,
 
)    strcmp(x,y)

Definition at line 3052 of file bigdecimal.c.

Referenced by VpAlloc().


Function Documentation

static int AddExponent ( Real a,
SIGNED_VALUE  n 
) [static]
static VALUE BigDecimal_abs ( VALUE  self) [static]
static VALUE BigDecimal_add ( VALUE  self,
VALUE  r 
) [static]
static VALUE BigDecimal_add2 ( VALUE  self,
VALUE  b,
VALUE  n 
) [static]
static VALUE BigDecimal_ceil ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static void BigDecimal_check_num ( Real p) [static]
static VALUE BigDecimal_coerce ( VALUE  self,
VALUE  other 
) [static]
static VALUE BigDecimal_comp ( VALUE  self,
VALUE  r 
) [static]

Definition at line 999 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static void BigDecimal_delete ( void *  pv) [static]

Definition at line 141 of file bigdecimal.c.

References VpFree().

static VALUE BigDecimal_div ( VALUE  self,
VALUE  r 
) [static]
static VALUE BigDecimal_div2 ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_divide ( Real **  c,
Real **  res,
Real **  div,
VALUE  self,
VALUE  r 
) [static]
static VALUE BigDecimal_divmod ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1332 of file bigdecimal.c.

References BigDecimal_DoDivmod(), div, DoSomeOne, ENTER, mod, NULL, rb_assoc_new(), rb_intern, SAVE, and ToValue().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_divremain ( VALUE  self,
VALUE  r,
Real **  dv,
Real **  rv 
) [static]
static VALUE BigDecimal_DoDivmod ( VALUE  self,
VALUE  r,
Real **  div,
Real **  mod 
) [static]
static VALUE BigDecimal_double_fig ( VALUE  self) [static]

Definition at line 289 of file bigdecimal.c.

References INT2FIX, and VpDblFig.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_dump ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_eq ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1015 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by BigDecimal_power(), and Init_bigdecimal().

static VALUE BigDecimal_exponent ( VALUE  self) [static]

Definition at line 1858 of file bigdecimal.c.

References GetVpValue(), INT2NUM(), and VpExponent10().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_fix ( VALUE  self) [static]
static VALUE BigDecimal_floor ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_frac ( VALUE  self) [static]

Definition at line 1602 of file bigdecimal.c.

References ENTER, GetVpValue(), GUARD_OBJ, Real::Prec, ToValue(), VpBaseFig, VpCreateRbObject(), and VpFrac().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_ge ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1063 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_global_new ( int  argc,
VALUE argv,
VALUE  self 
) [static]

Definition at line 2317 of file bigdecimal.c.

References BigDecimal_new(), and rb_cBigDecimal.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_gt ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1051 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_hash ( VALUE  self) [static]
static VALUE BigDecimal_inspect ( VALUE  self) [static]
static VALUE BigDecimal_IsFinite ( VALUE  self) [static]

Definition at line 602 of file bigdecimal.c.

References GetVpValue(), Qfalse, Qtrue, VpIsInf, and VpIsNaN.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_IsInfinite ( VALUE  self) [static]

Definition at line 592 of file bigdecimal.c.

References GetVpValue(), INT2FIX, Qnil, VpIsNegInf, and VpIsPosInf.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_IsNaN ( VALUE  self) [static]

Definition at line 581 of file bigdecimal.c.

References GetVpValue(), Qfalse, Qtrue, and VpIsNaN.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_le ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1039 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_limit ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_load ( VALUE  self,
VALUE  str 
) [static]
static VALUE BigDecimal_lt ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1027 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static size_t BigDecimal_memsize ( const void *  ptr) [static]

Definition at line 147 of file bigdecimal.c.

References BDIGIT, and Real::MaxPrec.

static VALUE BigDecimal_mod ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1249 of file bigdecimal.c.

References BigDecimal_DoDivmod(), div, DoSomeOne, ENTER, mod, NULL, SAVE, and ToValue().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_mode ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_mult ( VALUE  self,
VALUE  r 
) [static]
static VALUE BigDecimal_mult2 ( VALUE  self,
VALUE  b,
VALUE  n 
) [static]
static VALUE BigDecimal_neg ( VALUE  self) [static]

Definition at line 1069 of file bigdecimal.c.

References ENTER, GetVpValue(), GUARD_OBJ, Real::Prec, ToValue(), VpAsgn(), VpBaseFig, and VpCreateRbObject().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_new ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_nonzero ( VALUE  self) [static]

Definition at line 989 of file bigdecimal.c.

References GetVpValue(), Qnil, and VpIsZero.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_power ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_power_op ( VALUE  self,
VALUE  exp 
) [static]

Definition at line 2243 of file bigdecimal.c.

References BigDecimal_power().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_prec ( VALUE  self) [static]

Definition at line 304 of file bigdecimal.c.

References ENTER, GetVpValue(), GUARD_OBJ, INT2NUM(), Real::MaxPrec, Real::Prec, rb_assoc_new(), and VpBaseFig.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_remainder ( VALUE  self,
VALUE  r 
) [static]

Definition at line 1303 of file bigdecimal.c.

References BigDecimal_divremain(), and ToValue().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_round ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_save_exception_mode ( VALUE  self) [static]

Definition at line 2380 of file bigdecimal.c.

References Qnil, rb_jump_tag(), rb_protect(), rb_yield(), VpGetException(), and VpSetException().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_save_limit ( VALUE  self) [static]

Definition at line 2408 of file bigdecimal.c.

References Qnil, rb_jump_tag(), rb_protect(), rb_yield(), VpGetPrecLimit(), and VpSetPrecLimit().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_save_rounding_mode ( VALUE  self) [static]

Definition at line 2394 of file bigdecimal.c.

References Qnil, rb_jump_tag(), rb_protect(), rb_yield(), VpGetRoundMode(), and VpSetRoundMode().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_sign ( VALUE  self) [static]

Definition at line 2370 of file bigdecimal.c.

References GetVpValue(), INT2FIX, and Real::sign.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_split ( VALUE  self) [static]
static VALUE BigDecimal_sqrt ( VALUE  self,
VALUE  nFig 
) [static]
static VALUE BigDecimal_sub ( VALUE  self,
VALUE  r 
) [static]
static VALUE BigDecimal_sub2 ( VALUE  self,
VALUE  b,
VALUE  n 
) [static]
static VALUE BigDecimal_to_f ( VALUE  self) [static]
static VALUE BigDecimal_to_i ( VALUE  self) [static]
static VALUE BigDecimal_to_r ( VALUE  self) [static]
static VALUE BigDecimal_to_s ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_truncate ( int  argc,
VALUE argv,
VALUE  self 
) [static]
static VALUE BigDecimal_uplus ( VALUE  self) [static]

Definition at line 789 of file bigdecimal.c.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_version ( VALUE  self) [static]

Definition at line 117 of file bigdecimal.c.

References rb_str_new2().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_zero ( VALUE  self) [static]

Definition at line 981 of file bigdecimal.c.

References GetVpValue(), Qfalse, Qtrue, and VpIsZero.

Referenced by Init_bigdecimal().

static VALUE BigDecimalCmp ( VALUE  self,
VALUE  r,
char  op 
) [static]
static VALUE BigMath_s_exp ( VALUE  klass,
VALUE  x,
VALUE  vprec 
) [static]
static VALUE BigMath_s_log ( VALUE  klass,
VALUE  x,
VALUE  vprec 
) [static]
static int bigzero_p ( VALUE  x) [inline, static]

Definition at line 85 of file bigdecimal.c.

References BDIGIT, RBIGNUM_DIGITS, and RBIGNUM_LEN.

static void cannot_be_coerced_into_BigDecimal ( VALUE  exc_class,
VALUE  v 
) [static]
static unsigned short check_rounding_mode ( VALUE const  v) [static]
static size_t GetAddSubPrec ( Real a,
Real b 
) [static]
static SIGNED_VALUE GetPositiveInt ( VALUE  v) [static]
static Real* GetVpValue ( VALUE  v,
int  must 
) [static]
static Real* GetVpValueWithPrec ( VALUE  v,
long  prec,
int  must 
) [static]
void Init_bigdecimal ( void  )

Definition at line 2815 of file bigdecimal.c.

References BigDecimal_abs(), BigDecimal_add(), BigDecimal_add2(), BigDecimal_ceil(), BigDecimal_coerce(), BigDecimal_comp(), BigDecimal_div(), BigDecimal_div2(), BigDecimal_divmod(), BigDecimal_double_fig(), BigDecimal_dump(), BigDecimal_eq(), BigDecimal_exponent(), BigDecimal_fix(), BigDecimal_floor(), BigDecimal_frac(), BigDecimal_ge(), BigDecimal_global_new(), BigDecimal_gt(), BigDecimal_hash(), BigDecimal_inspect(), BigDecimal_IsFinite(), BigDecimal_IsInfinite(), BigDecimal_IsNaN(), BigDecimal_le(), BigDecimal_limit(), BigDecimal_load(), BigDecimal_lt(), BigDecimal_mod(), BigDecimal_mode(), BigDecimal_mult(), BigDecimal_mult2(), BigDecimal_neg(), BigDecimal_new(), BigDecimal_nonzero(), BigDecimal_power(), BigDecimal_power_op(), BigDecimal_prec(), BigDecimal_remainder(), BigDecimal_round(), BigDecimal_save_exception_mode(), BigDecimal_save_limit(), BigDecimal_save_rounding_mode(), BigDecimal_sign(), BigDecimal_split(), BigDecimal_sqrt(), BigDecimal_sub(), BigDecimal_sub2(), BigDecimal_to_f(), BigDecimal_to_i(), BigDecimal_to_r(), BigDecimal_to_s(), BigDecimal_truncate(), BigDecimal_uplus(), BigDecimal_version(), BigDecimal_zero(), BigMath_s_exp(), BigMath_s_log(), id_banker, id_BigDecimal_exception_mode, id_BigDecimal_precision_limit, id_BigDecimal_rounding_mode, id_ceil, id_ceiling, id_default, id_down, id_eq, id_floor, id_half_down, id_half_even, id_half_up, id_to_r, id_truncate, id_up, INT2FIX, rb_cBigDecimal, rb_cNumeric, rb_define_class(), rb_define_const(), rb_define_global_function(), rb_define_method(), rb_define_module(), rb_define_singleton_method(), rb_intern_const, rb_mBigMath, rb_str_new2(), SIGNED_VALUE, VP_EXCEPTION_ALL, VP_EXCEPTION_INFINITY, VP_EXCEPTION_NaN, VP_EXCEPTION_OVERFLOW, VP_EXCEPTION_UNDERFLOW, VP_EXCEPTION_ZERODIVIDE, VP_ROUND_CEIL, VP_ROUND_DOWN, VP_ROUND_FLOOR, VP_ROUND_HALF_DOWN, VP_ROUND_HALF_EVEN, VP_ROUND_HALF_UP, VP_ROUND_MODE, VP_ROUND_UP, VP_SIGN_NaN, VP_SIGN_NEGATIVE_FINITE, VP_SIGN_NEGATIVE_INFINITE, VP_SIGN_NEGATIVE_ZERO, VP_SIGN_POSITIVE_FINITE, VP_SIGN_POSITIVE_INFINITE, VP_SIGN_POSITIVE_ZERO, VpBaseVal, and VpInit().

static int is_even ( VALUE  x) [inline, static]

Definition at line 1976 of file bigdecimal.c.

References FIX2LONG, RBIGNUM_DIGITS, T_BIGNUM, T_FIXNUM, and TYPE.

Referenced by BigDecimal_power().

static int is_integer ( VALUE  x) [inline, static]

Definition at line 1905 of file bigdecimal.c.

References T_BIGNUM, T_FIXNUM, and TYPE.

Referenced by BigDecimal_power().

static int is_kind_of_BigDecimal ( VALUE const  v) [inline, static]
static int is_negative ( VALUE  x) [inline, static]

Definition at line 1911 of file bigdecimal.c.

References FIX2LONG, FIXNUM_P, INT2FIX, rb_funcall(), RBIGNUM_NEGATIVE_P, RFLOAT_VALUE, RTEST, T_BIGNUM, T_FLOAT, and TYPE.

Referenced by BigDecimal_power().

static int is_one ( VALUE  x) [inline, static]

Definition at line 1951 of file bigdecimal.c.

References FIX2LONG, FIXNUM_P, id_eq, INT2FIX, Qfalse, rb_funcall(), RRATIONAL, RTEST, T_BIGNUM, T_FIXNUM, T_RATIONAL, and TYPE.

Referenced by BigDecimal_power().

static int is_zero ( VALUE  x) [inline, static]

Definition at line 1928 of file bigdecimal.c.

References FIX2LONG, FIXNUM_P, id_eq, INT2FIX, Qfalse, rb_funcall(), RRATIONAL, RTEST, T_BIGNUM, T_FIXNUM, T_RATIONAL, and TYPE.

Referenced by BigDecimal_power().

NORETURN ( static void   cannot_be_coerced_into_BigDecimalVALUE, VALUE)
static double One ( void  ) [static]
static VALUE rmpd_power_by_big_decimal ( Real const *  x,
Real const *  exp,
ssize_t const  n 
) [static]
static VALUE ToValue ( Real p) [static]
VP_EXPORT int VpActiveRound ( Real y,
Real x,
unsigned short  f,
ssize_t  nf 
)
static BDIGIT VpAddAbs ( Real a,
Real b,
Real c 
) [static]

Definition at line 3889 of file bigdecimal.c.

References BASE, BDIGIT, bp, Real::frac, VpAsgn(), and VpSetPTR().

Referenced by VpAddSub().

VP_EXPORT size_t VpAddSub ( Real c,
Real a,
Real b,
int  operation 
)
VP_EXPORT Real* VpAlloc ( size_t  mx,
const char *  szVal 
)
VP_EXPORT size_t VpAsgn ( Real c,
Real a,
int  isw 
)
VP_EXPORT int VpComp ( Real a,
Real b 
)

Definition at line 4564 of file bigdecimal.c.

References Real::exponent, Real::frac, Real::Prec, Real::sign, VpGetSign, VpIsDef, VpIsNaN, and VpIsZero.

Referenced by BigDecimalCmp().

VP_EXPORT Real* VpCreateRbObject ( size_t  mx,
const char *  str 
)
VP_EXPORT int VpCtoV ( Real a,
const char *  int_chr,
size_t  ni,
const char *  frac,
size_t  nf,
const char *  exp_chr,
size_t  ne 
)
VP_EXPORT size_t VpDivd ( Real c,
Real r,
Real a,
Real b 
)
VP_EXPORT void VpDtoV ( Real m,
double  d 
)
static Real * VpDup ( Real const *const  x) [static]
VP_EXPORT int VpException ( unsigned short  f,
const char *  str,
int  always 
)
VP_EXPORT ssize_t VpExponent10 ( Real a)
static void VpFormatSt ( char *  psz,
size_t  fFmt 
) [static]

Definition at line 4753 of file bigdecimal.c.

References ISSPACE, memmove(), and strlen().

Referenced by VpToFString(), and VpToString().

VP_EXPORT void VpFrac ( Real y,
Real x 
)
VP_EXPORT void VpFree ( Real pv)

Definition at line 3082 of file bigdecimal.c.

References getchar, NULL, and xfree().

Referenced by BigDecimal_delete(), VpMult(), VpPower(), and VpSqrt().

VP_EXPORT double VpGetDoubleNaN ( void  )

Definition at line 3263 of file bigdecimal.c.

References Zero().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoubleNegInf ( void  )

Definition at line 3279 of file bigdecimal.c.

References One(), and Zero().

Referenced by BigDecimal_to_f(), VpGetDoubleNegZero(), VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoubleNegZero ( void  )

Definition at line 3287 of file bigdecimal.c.

References One(), and VpGetDoubleNegInf().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoublePosInf ( void  )

Definition at line 3271 of file bigdecimal.c.

References One(), and Zero().

Referenced by BigDecimal_to_f(), VpInit(), and VpVtoD().

static unsigned short VpGetException ( void  ) [static]
VP_EXPORT size_t VpGetPrecLimit ( void  )
VP_EXPORT unsigned short VpGetRoundMode ( void  )
VP_EXPORT size_t VpInit ( BDIGIT  BaseVal)
static void VpInternalRound ( Real c,
size_t  ixDigit,
BDIGIT  vPrev,
BDIGIT  v 
) [static]
static int VpIsDefOP ( Real c,
Real a,
Real b,
int  sw 
) [static]
VP_EXPORT int VpIsRoundMode ( unsigned short  n)
VP_EXPORT int VpLeftRound ( Real y,
unsigned short  f,
ssize_t  nf 
)
static int VpLimitRound ( Real c,
size_t  ixDigit 
) [static]

Definition at line 5623 of file bigdecimal.c.

References BASE_FIG, Real::Prec, VpGetPrecLimit(), VpGetRoundMode(), VpLeftRound(), and VpNmlz().

Referenced by VpAsgn(), VpInternalRound(), and VpMult().

VP_EXPORT void* VpMemAlloc ( size_t  mb)

Definition at line 3068 of file bigdecimal.c.

References VP_EXCEPTION_MEMORY, VpException(), and xmalloc.

Referenced by VpAlloc(), and VpDup().

VP_EXPORT int VpMidRound ( Real y,
unsigned short  f,
ssize_t  nf 
)
VP_EXPORT size_t VpMult ( Real c,
Real a,
Real b 
)
VP_EXPORT Real* VpNewRbClass ( size_t  mx,
const char *  str,
VALUE  klass 
)

Definition at line 543 of file bigdecimal.c.

References Real::obj, TypedData_Wrap_Struct, and VpAlloc().

Referenced by BigDecimal_load(), and BigDecimal_new().

static int VpNmlz ( Real a) [static]
VP_EXPORT size_t VpNumOfChars ( Real vp,
const char *  pszFmt 
)
VP_EXPORT Real* VpOne ( void  )

Definition at line 3516 of file bigdecimal.c.

References VpConstOne.

Referenced by BigDecimal_DoDivmod().

VP_EXPORT int VpPower ( Real y,
Real x,
SIGNED_VALUE  n 
)
static int VpRdup ( Real m,
size_t  ind_m 
) [static]

Definition at line 5684 of file bigdecimal.c.

References AddExponent(), BASE, BDIGIT, Real::frac, Real::Prec, and VpNmlz().

Referenced by VpInternalRound(), and VpMidRound().

static void VpSetException ( unsigned short  f) [static]
VP_EXPORT size_t VpSetPrecLimit ( size_t  n)
static size_t VpSetPTR ( Real a,
Real b,
Real c,
size_t *  a_pos,
size_t *  b_pos,
size_t *  c_pos,
BDIGIT *  av,
BDIGIT *  bv 
) [static]

Definition at line 4092 of file bigdecimal.c.

References AddExponent(), Real::exponent, Real::frac, Max, Real::MaxPrec, and Real::Prec.

Referenced by VpAddAbs(), and VpSubAbs().

VP_EXPORT unsigned short VpSetRoundMode ( unsigned short  n)
VP_EXPORT int VpSqrt ( Real y,
Real x 
)
static BDIGIT VpSubAbs ( Real a,
Real b,
Real c 
) [static]

Definition at line 3980 of file bigdecimal.c.

References BASE, BDIGIT, bp, Real::frac, VpAsgn(), and VpSetPTR().

Referenced by VpAddSub().

VP_EXPORT void VpSzMantissa ( Real a,
char *  psz 
)
VP_EXPORT void VpToFString ( Real a,
char *  psz,
size_t  fFmt,
int  fPlus 
)
VP_EXPORT int VpToSpecialString ( Real a,
char *  psz,
int  fPlus 
)

Definition at line 4841 of file bigdecimal.c.

References SZ_INF, SZ_NaN, SZ_NINF, VpIsNaN, VpIsNegInf, VpIsPosInf, VpIsPosZero, and VpIsZero.

Referenced by VpToFString(), and VpToString().

VP_EXPORT void VpToString ( Real a,
char *  psz,
size_t  fFmt,
int  fPlus 
)
VP_EXPORT int VpVtoD ( double *  d,
SIGNED_VALUE *  e,
Real m 
)
static double Zero ( void  ) [static]

Variable Documentation

Initial value:
 {
    "BigDecimal",
    {0, BigDecimal_delete, BigDecimal_memsize,},
}

Definition at line 153 of file bigdecimal.c.

volatile const double gOne_ABCED9B4_CE73__00400511F31D = 1.0

Definition at line 3235 of file bigdecimal.c.

Referenced by One().

volatile const double gZero_ABCED9B1_CE73__00400511F31D = 0.0

Definition at line 3234 of file bigdecimal.c.

Referenced by Zero().

ID id_banker [static]

Definition at line 55 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

Definition at line 44 of file bigdecimal.c.

Referenced by Init_bigdecimal(), and VpGetException().

Definition at line 46 of file bigdecimal.c.

Referenced by Init_bigdecimal(), and VpGetPrecLimit().

Definition at line 45 of file bigdecimal.c.

Referenced by Init_bigdecimal(), and VpGetRoundMode().

ID id_ceil [static]

Definition at line 57 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_ceiling [static]

Definition at line 56 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_default [static]

Definition at line 52 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_down [static]

Definition at line 49 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_eq [static]
ID id_floor [static]

Definition at line 58 of file bigdecimal.c.

ID id_half_down [static]

Definition at line 53 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_half_even [static]

Definition at line 54 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_half_up [static]

Definition at line 51 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_to_r [static]

Definition at line 59 of file bigdecimal.c.

ID id_truncate [static]

Definition at line 50 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

ID id_up [static]

Definition at line 48 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

Definition at line 41 of file bigdecimal.c.

Referenced by BigDecimal_global_new(), Init_bigdecimal(), and VpCreateRbObject().

Definition at line 42 of file bigdecimal.c.

Referenced by Init_bigdecimal().

Real* VpConstOne [static]

Definition at line 3045 of file bigdecimal.c.

Referenced by VpOne().

Real* VpPt5 [static]

Definition at line 3046 of file bigdecimal.c.