Ruby  2.0.0p451(2014-02-24revision45167)
Macros | Functions | Variables
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.

Macros

#define NDEBUG
 
#define ENTER(n)   volatile VALUE RB_UNUSED_VAR(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) /* figure of double */
 
#define RBIGNUM_ZERO_P(x)
 
#define RRATIONAL_ZERO_P(x)
 
#define RRATIONAL_NEGATIVE_P(x)   RTEST(rb_funcall((x), '<', 1, INT2FIX(0)))
 
#define DECIMAL_SIZE_OF_BITS(n)   (((n) * 3010 + 9998) / 9999)
 
#define RB_OBJ_CLASSNAME(obj)   rb_obj_class(obj)
 
#define RB_OBJ_STRING(obj)   (obj)
 
#define DoSomeOne(x, y, f)   rb_num_coerce_bin(x,y,f)
 
#define VpAllocReal(prec)   (Real *)VpMemAlloc(offsetof(Real, frac) + (prec) * sizeof(BDIGIT))
 
#define VpReallocReal(ptr, prec)   (Real *)VpMemRealloc((ptr), offsetof(Real, frac) + (prec) * sizeof(BDIGIT))
 
#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 /* Maximum iterations for calcurating sqrt. */
 
#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 RealVpCopy (Real *pv, 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_s_allocate (VALUE klass)
 
static RealBigDecimal_new (int argc, VALUE *argv)
 
static VALUE BigDecimal_initialize (int argc, VALUE *argv, VALUE self)
 
static VALUE BigDecimal_initialize_copy (VALUE self, VALUE other)
 
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 * VpMemRealloc (void *ptr, 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
 

Macro Definition 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 2025 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 2026 of file bigdecimal.c.

Referenced by rmpd_power_by_big_decimal().

#define DBLE_FIG   (DBL_DIG+1) /* figure of double */

Definition at line 75 of file bigdecimal.c.

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

#define DECIMAL_SIZE_OF_BITS (   n)    (((n) * 3010 + 9998) / 9999)

Definition at line 106 of file bigdecimal.c.

#define DoSomeOne (   x,
  y,
  f 
)    rb_num_coerce_bin(x,y,f)
#define ENTER (   n)    volatile VALUE RB_UNUSED_VAR(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 2049 of file bigdecimal.c.

Referenced by BigDecimal_power().

#define maxnr   100UL /* Maximum iterations for calcurating sqrt. */

Definition at line 3263 of file bigdecimal.c.

Referenced by VpSqrt().

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

Definition at line 3267 of file bigdecimal.c.

#define NDEBUG

Definition at line 23 of file bigdecimal.c.

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

Definition at line 111 of file bigdecimal.c.

Referenced by BigDecimal_new(), BigDecimal_power(), and GetVpValueWithPrec().

#define RB_OBJ_STRING (   obj)    (obj)

Definition at line 112 of file bigdecimal.c.

Referenced by generate_json_float().

#define RBIGNUM_ZERO_P (   x)
Value:
(RBIGNUM_LEN(x) == 0 || \
(RBIGNUM_DIGITS(x)[0] == 0 && \
(RBIGNUM_LEN(x) == 1 || bigzero_p(x))))
static int bigzero_p(VALUE x)
Definition: bigdecimal.c:85
#define RBIGNUM_LEN(b)
#define RBIGNUM_DIGITS(b)

Definition at line 79 of file bigdecimal.c.

Referenced by BigMath_s_log().

#define RMPD_PRECISION_LIMIT_DEFAULT   ((size_t)0)

Definition at line 3369 of file bigdecimal.c.

Referenced by VpGetPrecLimit().

#define rmpd_set_thread_local_exception_mode (   mode)
Value:
INT2FIX((int)(mode)) \
)
#define INT2FIX(i)
static ID id_BigDecimal_exception_mode
Definition: bigdecimal.c:44
VALUE rb_thread_current(void)
Definition: thread.c:2352
VALUE rb_thread_local_aset(VALUE, ID, VALUE)
Definition: thread.c:2750

Definition at line 3330 of file bigdecimal.c.

Referenced by VpGetException(), and VpSetException().

#define rmpd_set_thread_local_precision_limit (   limit)
Value:
SIZET2NUM(limit) \
)
#define SIZET2NUM(v)
VALUE rb_thread_current(void)
Definition: thread.c:2352
static ID id_BigDecimal_precision_limit
Definition: bigdecimal.c:46
VALUE rb_thread_local_aset(VALUE, ID, VALUE)
Definition: thread.c:2750

Definition at line 3363 of file bigdecimal.c.

Referenced by VpGetPrecLimit(), and VpSetPrecLimit().

#define rmpd_set_thread_local_rounding_mode (   mode)
Value:
INT2FIX((int)(mode)) \
)
static ID id_BigDecimal_rounding_mode
Definition: bigdecimal.c:45
#define INT2FIX(i)
VALUE rb_thread_current(void)
Definition: thread.c:2352
VALUE rb_thread_local_aset(VALUE, ID, VALUE)
Definition: thread.c:2750

Definition at line 3400 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)
#define FIXNUM_P(f)
#define FIX2LONG(x)
#define RRATIONAL(obj)

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 3268 of file bigdecimal.c.

Referenced by VpAlloc().

#define VpAllocReal (   prec)    (Real *)VpMemAlloc(offsetof(Real, frac) + (prec) * sizeof(BDIGIT))

Definition at line 588 of file bigdecimal.c.

Referenced by VpAlloc().

#define VpReallocReal (   ptr,
  prec 
)    (Real *)VpMemRealloc((ptr), offsetof(Real, frac) + (prec) * sizeof(BDIGIT))

Definition at line 589 of file bigdecimal.c.

Referenced by VpCopy().

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 1056 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static void BigDecimal_delete ( void *  pv)
static

Definition at line 152 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 1447 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 299 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 1072 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by BigDecimal_power(), and Init_bigdecimal().

static VALUE BigDecimal_exponent ( VALUE  self)
static

Definition at line 1982 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 1716 of file bigdecimal.c.

References c, 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 1124 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 2485 of file bigdecimal.c.

References BigDecimal_new(), NULL, Real::obj, rb_cBigDecimal, ToValue(), TypedData_Wrap_Struct, and VpCopy().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_gt ( VALUE  self,
VALUE  r 
)
static

Definition at line 1111 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_hash ( VALUE  self)
static
static VALUE BigDecimal_initialize ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 2403 of file bigdecimal.c.

References BigDecimal_new(), DATA_PTR, Real::obj, rb_check_typeddata(), ToValue(), VpCopy(), and VpFree().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_initialize_copy ( VALUE  self,
VALUE  other 
)
static

Definition at line 2425 of file bigdecimal.c.

References DATA_PTR, rb_check_typeddata(), and VpCopy().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_inspect ( VALUE  self)
static
static VALUE BigDecimal_IsFinite ( VALUE  self)
static

Definition at line 630 of file bigdecimal.c.

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

Referenced by Init_bigdecimal().

static VALUE BigDecimal_IsInfinite ( VALUE  self)
static

Definition at line 620 of file bigdecimal.c.

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

Referenced by Init_bigdecimal().

static VALUE BigDecimal_IsNaN ( VALUE  self)
static

Definition at line 609 of file bigdecimal.c.

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

Referenced by Init_bigdecimal().

static VALUE BigDecimal_le ( VALUE  self,
VALUE  r 
)
static

Definition at line 1098 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 1085 of file bigdecimal.c.

References BigDecimalCmp().

Referenced by Init_bigdecimal().

static size_t BigDecimal_memsize ( const void *  ptr)
static

Definition at line 158 of file bigdecimal.c.

References BDIGIT, and Real::MaxPrec.

static VALUE BigDecimal_mod ( VALUE  self,
VALUE  r 
)
static

Definition at line 1355 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 1139 of file bigdecimal.c.

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

Referenced by Init_bigdecimal().

static Real * BigDecimal_new ( int  argc,
VALUE argv 
)
static
static VALUE BigDecimal_nonzero ( VALUE  self)
static

Definition at line 1046 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 2371 of file bigdecimal.c.

References BigDecimal_power().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_prec ( VALUE  self)
static

Definition at line 314 of file bigdecimal.c.

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

Referenced by Init_bigdecimal().

static VALUE BigDecimal_remainder ( VALUE  self,
VALUE  r 
)
static

Definition at line 1418 of file bigdecimal.c.

References BigDecimal_divremain(), f, and ToValue().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_round ( int  argc,
VALUE argv,
VALUE  self 
)
static
static VALUE BigDecimal_s_allocate ( VALUE  klass)
static

Definition at line 2377 of file bigdecimal.c.

References NULL, Real::obj, and VpNewRbClass().

Referenced by Init_bigdecimal().

static VALUE BigDecimal_save_exception_mode ( VALUE  self)
static

Definition at line 2566 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 2616 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 2591 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 2541 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 827 of file bigdecimal.c.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_version ( VALUE  self)
static

Definition at line 128 of file bigdecimal.c.

References rb_str_new2.

Referenced by Init_bigdecimal().

static VALUE BigDecimal_zero ( VALUE  self)
static

Definition at line 1038 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)
inlinestatic

Definition at line 85 of file bigdecimal.c.

References BDIGIT, i, 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 3027 of file bigdecimal.c.

References arg, 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_initialize(), BigDecimal_initialize_copy(), 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_nonzero(), BigDecimal_power(), BigDecimal_power_op(), BigDecimal_prec(), BigDecimal_remainder(), BigDecimal_round(), BigDecimal_s_allocate(), 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_alloc_func(), 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)
inlinestatic

Definition at line 2100 of file bigdecimal.c.

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

Referenced by BigDecimal_power().

static int is_integer ( VALUE  x)
inlinestatic

Definition at line 2029 of file bigdecimal.c.

References RB_TYPE_P, T_BIGNUM, and T_FIXNUM.

Referenced by BigDecimal_power(), and BigMath_s_log().

static int is_kind_of_BigDecimal ( VALUE const  v)
inlinestatic
static int is_negative ( VALUE  x)
inlinestatic
static int is_one ( VALUE  x)
inlinestatic

Definition at line 2075 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)
inlinestatic

Definition at line 2052 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 4115 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 4787 of file bigdecimal.c.

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

Referenced by BigDecimalCmp().

static Real * VpCopy ( Real pv,
Real const *const  x 
)
static
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 
)
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 4976 of file bigdecimal.c.

References i, 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 3308 of file bigdecimal.c.

References getchar, NULL, and xfree.

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

VP_EXPORT double VpGetDoubleNaN ( void  )

Definition at line 3489 of file bigdecimal.c.

References Zero().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoubleNegInf ( void  )

Definition at line 3505 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 3513 of file bigdecimal.c.

References One(), and VpGetDoubleNegInf().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoublePosInf ( void  )

Definition at line 3497 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 5843 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 3284 of file bigdecimal.c.

References p, VP_EXCEPTION_MEMORY, VpException(), and xmalloc.

VP_EXPORT void* VpMemRealloc ( void *  ptr,
size_t  mb 
)

Definition at line 3298 of file bigdecimal.c.

References p, VP_EXCEPTION_MEMORY, VpException(), and xrealloc.

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 573 of file bigdecimal.c.

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

Referenced by BigDecimal_load(), and BigDecimal_s_allocate().

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

Definition at line 3742 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 5904 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 4318 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 4206 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 5064 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

const rb_data_type_t BigDecimal_data_type
static
Initial value:
= {
"BigDecimal",
}
static void BigDecimal_delete(void *pv)
Definition: bigdecimal.c:152
static size_t BigDecimal_memsize(const void *ptr)
Definition: bigdecimal.c:158

Definition at line 164 of file bigdecimal.c.

volatile const double gOne_ABCED9B4_CE73__00400511F31D = 1.0

Definition at line 3461 of file bigdecimal.c.

Referenced by One().

volatile const double gZero_ABCED9B1_CE73__00400511F31D = 0.0

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

ID id_BigDecimal_exception_mode
static

Definition at line 44 of file bigdecimal.c.

Referenced by Init_bigdecimal(), and VpGetException().

ID id_BigDecimal_precision_limit
static

Definition at line 46 of file bigdecimal.c.

Referenced by Init_bigdecimal(), and VpGetPrecLimit().

ID id_BigDecimal_rounding_mode
static

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

Definition at line 60 of file bigdecimal.c.

Referenced by Init_bigdecimal(), is_one(), and is_zero().

ID id_floor
static

Definition at line 58 of file bigdecimal.c.

Referenced by check_rounding_mode(), and Init_bigdecimal().

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.

Referenced by GetVpValueWithPrec(), and Init_bigdecimal().

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().

VALUE rb_cBigDecimal

Definition at line 41 of file bigdecimal.c.

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

VALUE rb_mBigMath

Definition at line 42 of file bigdecimal.c.

Referenced by Init_bigdecimal().

Real* VpConstOne
static

Definition at line 3261 of file bigdecimal.c.

Referenced by VpOne().

Real* VpPt5
static

Definition at line 3262 of file bigdecimal.c.