Ruby  2.0.0p247(2013-06-27revision41674)
Data Structures | Defines | Functions | Variables
ext/bigdecimal/bigdecimal.h File Reference
#include "ruby/ruby.h"
#include <float.h>

Go to the source code of this file.

Data Structures

struct  Real

Defines

#define vabs   abs
#define RMPD_COMPONENT_FIGURES   2
#define RMPD_BASE   ((BDIGIT)100U)
#define SZ_NaN   "NaN"
#define SZ_INF   "Infinity"
#define SZ_PINF   "+Infinity"
#define SZ_NINF   "-Infinity"
#define VP_EXPORT   static
#define VP_EXCEPTION_ALL   ((unsigned short)0x00FF)
#define VP_EXCEPTION_INFINITY   ((unsigned short)0x0001)
#define VP_EXCEPTION_NaN   ((unsigned short)0x0002)
#define VP_EXCEPTION_UNDERFLOW   ((unsigned short)0x0004)
#define VP_EXCEPTION_OVERFLOW   ((unsigned short)0x0001) /* 0x0008) */
#define VP_EXCEPTION_ZERODIVIDE   ((unsigned short)0x0010)
#define VP_EXCEPTION_OP   ((unsigned short)0x0020)
#define VP_EXCEPTION_MEMORY   ((unsigned short)0x0040)
#define RMPD_EXCEPTION_MODE_DEFAULT   0U
#define VP_ROUND_MODE   ((unsigned short)0x0100)
#define VP_ROUND_UP   1
#define VP_ROUND_DOWN   2
#define VP_ROUND_HALF_UP   3
#define VP_ROUND_HALF_DOWN   4
#define VP_ROUND_CEIL   5
#define VP_ROUND_FLOOR   6
#define VP_ROUND_HALF_EVEN   7
#define RMPD_ROUNDING_MODE_DEFAULT   VP_ROUND_HALF_UP
#define VP_SIGN_NaN   0 /* NaN */
#define VP_SIGN_POSITIVE_ZERO   1 /* Positive zero */
#define VP_SIGN_NEGATIVE_ZERO   -1 /* Negative zero */
#define VP_SIGN_POSITIVE_FINITE   2 /* Positive finite number */
#define VP_SIGN_NEGATIVE_FINITE   -2 /* Negative finite number */
#define VP_SIGN_POSITIVE_INFINITE   3 /* Positive infinite number */
#define VP_SIGN_NEGATIVE_INFINITE   -3 /* Negative infinite number */
#define FLEXIBLE_ARRAY_SIZE   1
#define VpBaseFig()   rmpd_component_figures()
#define VpDblFig()   rmpd_double_figures()
#define VpBaseVal()   rmpd_base_value()
#define Abs(a)   (((a)>= 0)?(a):(-(a)))
#define Max(a, b)   (((a)>(b))?(a):(b))
#define Min(a, b)   (((a)>(b))?(b):(a))
#define VpMaxPrec(a)   ((a)->MaxPrec)
#define VpPrec(a)   ((a)->Prec)
#define VpGetFlag(a)   ((a)->flag)
#define VpGetSign(a)   (((a)->sign>0)?1:(-1))
#define VpChangeSign(a, s)   {if((s)>0) (a)->sign=(short)Abs((ssize_t)(a)->sign);else (a)->sign=-(short)Abs((ssize_t)(a)->sign);}
#define VpSetSign(a, s)   {if((s)>0) (a)->sign=(short)VP_SIGN_POSITIVE_FINITE;else (a)->sign=(short)VP_SIGN_NEGATIVE_FINITE;}
#define VpSetOne(a)   {(a)->Prec=(a)->exponent=(a)->frac[0]=1;(a)->sign=VP_SIGN_POSITIVE_FINITE;}
#define VpIsPosZero(a)   ((a)->sign==VP_SIGN_POSITIVE_ZERO)
#define VpIsNegZero(a)   ((a)->sign==VP_SIGN_NEGATIVE_ZERO)
#define VpIsZero(a)   (VpIsPosZero(a) || VpIsNegZero(a))
#define VpSetPosZero(a)   ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_POSITIVE_ZERO)
#define VpSetNegZero(a)   ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NEGATIVE_ZERO)
#define VpSetZero(a, s)   ( ((s)>0)?VpSetPosZero(a):VpSetNegZero(a) )
#define VpIsNaN(a)   ((a)->sign==VP_SIGN_NaN)
#define VpSetNaN(a)   ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NaN)
#define VpIsPosInf(a)   ((a)->sign==VP_SIGN_POSITIVE_INFINITE)
#define VpIsNegInf(a)   ((a)->sign==VP_SIGN_NEGATIVE_INFINITE)
#define VpIsInf(a)   (VpIsPosInf(a) || VpIsNegInf(a))
#define VpIsDef(a)   ( !(VpIsNaN(a)||VpIsInf(a)) )
#define VpSetPosInf(a)   ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_POSITIVE_INFINITE)
#define VpSetNegInf(a)   ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NEGATIVE_INFINITE)
#define VpSetInf(a, s)   ( ((s)>0)?VpSetPosInf(a):VpSetNegInf(a) )
#define VpHasVal(a)   (a->frac[0])
#define VpIsOne(a)   ((a->Prec==1)&&(a->frac[0]==1)&&(a->exponent==1))
#define VpExponent(a)   (a->exponent)

Functions

static long labs (long const x)
static LONG_LONG llabs (LONG_LONG const x)
VP_EXPORT RealVpNewRbClass (size_t mx, char const *str, VALUE klass)
VP_EXPORT RealVpCreateRbObject (size_t mx, const char *str)
static BDIGIT rmpd_base_value (void)
static size_t rmpd_component_figures (void)
static size_t rmpd_double_figures (void)
VP_EXPORT double VpGetDoubleNaN (void)
VP_EXPORT double VpGetDoublePosInf (void)
VP_EXPORT double VpGetDoubleNegInf (void)
VP_EXPORT double VpGetDoubleNegZero (void)
VP_EXPORT size_t VpGetPrecLimit (void)
VP_EXPORT size_t VpSetPrecLimit (size_t n)
VP_EXPORT int VpIsRoundMode (unsigned short n)
VP_EXPORT unsigned short VpGetRoundMode (void)
VP_EXPORT unsigned short VpSetRoundMode (unsigned short n)
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 void * VpMemAlloc (size_t mb)
VP_EXPORT void * VpMemRealloc (void *ptr, size_t mb)
VP_EXPORT void VpFree (Real *pv)
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 VpActiveRound (Real *y, Real *x, unsigned short f, ssize_t il)
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 void VpFrac (Real *y, Real *x)
VP_EXPORT int VpPower (Real *y, Real *x, SIGNED_VALUE n)
VP_EXPORT RealVpOne (void)

Variables

VALUE rb_cBigDecimal

Define Documentation

#define Abs (   a)    (((a)>= 0)?(a):(-(a)))

Definition at line 237 of file bigdecimal.h.

#define FLEXIBLE_ARRAY_SIZE   1

Definition at line 129 of file bigdecimal.h.

#define Max (   a,
 
)    (((a)>(b))?(a):(b))

Definition at line 238 of file bigdecimal.h.

Referenced by VpAlloc(), and VpSetPTR().

#define Min (   a,
 
)    (((a)>(b))?(b):(a))

Definition at line 239 of file bigdecimal.h.

Referenced by VpAddSub(), VpDivd(), VpFrac(), VpSqrt(), and VpVtoD().

#define RMPD_BASE   ((BDIGIT)100U)

Definition at line 74 of file bigdecimal.h.

Referenced by rmpd_base_value().

#define RMPD_COMPONENT_FIGURES   2

Definition at line 73 of file bigdecimal.h.

Referenced by rmpd_component_figures().

#define RMPD_EXCEPTION_MODE_DEFAULT   0U

Definition at line 104 of file bigdecimal.h.

Referenced by VpGetException().

Definition at line 116 of file bigdecimal.h.

Referenced by VpGetRoundMode().

#define SZ_INF   "Infinity"

Definition at line 82 of file bigdecimal.h.

Referenced by VpAlloc(), VpSzMantissa(), and VpToSpecialString().

#define SZ_NaN   "NaN"

Definition at line 81 of file bigdecimal.h.

Referenced by VpAlloc(), VpSzMantissa(), and VpToSpecialString().

#define SZ_NINF   "-Infinity"

Definition at line 84 of file bigdecimal.h.

Referenced by VpAlloc(), VpSzMantissa(), and VpToSpecialString().

#define SZ_PINF   "+Infinity"

Definition at line 83 of file bigdecimal.h.

Referenced by VpAlloc().

#define vabs   abs

Definition at line 51 of file bigdecimal.h.

Referenced by BigDecimal_divide(), BigDecimal_DoDivmod(), BigMath_s_exp(), and BigMath_s_log().

#define VP_EXCEPTION_ALL   ((unsigned short)0x00FF)

Definition at line 93 of file bigdecimal.h.

Referenced by BigDecimal_mode(), and Init_bigdecimal().

#define VP_EXCEPTION_INFINITY   ((unsigned short)0x0001)
#define VP_EXCEPTION_MEMORY   ((unsigned short)0x0040)

Definition at line 102 of file bigdecimal.h.

Referenced by VpException(), VpMemAlloc(), and VpMemRealloc().

#define VP_EXCEPTION_NaN   ((unsigned short)0x0002)
#define VP_EXCEPTION_OP   ((unsigned short)0x0020)

Definition at line 101 of file bigdecimal.h.

Referenced by VpException(), and VpSqrt().

#define VP_EXCEPTION_OVERFLOW   ((unsigned short)0x0001) /* 0x0008) */

Definition at line 97 of file bigdecimal.h.

Referenced by AddExponent(), BigDecimal_to_f(), and Init_bigdecimal().

#define VP_EXCEPTION_UNDERFLOW   ((unsigned short)0x0004)
#define VP_EXCEPTION_ZERODIVIDE   ((unsigned short)0x0010)

Definition at line 98 of file bigdecimal.h.

Referenced by BigDecimal_mode(), Init_bigdecimal(), VpDivd(), and VpException().

#define VP_EXPORT   static

Definition at line 90 of file bigdecimal.h.

#define VP_ROUND_CEIL   5
#define VP_ROUND_DOWN   2
#define VP_ROUND_FLOOR   6
#define VP_ROUND_HALF_DOWN   4
#define VP_ROUND_HALF_EVEN   7
#define VP_ROUND_HALF_UP   3
#define VP_ROUND_MODE   ((unsigned short)0x0100)

Definition at line 107 of file bigdecimal.h.

Referenced by BigDecimal_mode(), and Init_bigdecimal().

#define VP_ROUND_UP   1
#define VP_SIGN_NaN   0 /* NaN */

Definition at line 118 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_NEGATIVE_FINITE   -2 /* Negative finite number */

Definition at line 122 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_NEGATIVE_INFINITE   -3 /* Negative infinite number */

Definition at line 124 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_NEGATIVE_ZERO   -1 /* Negative zero */

Definition at line 120 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_POSITIVE_FINITE   2 /* Positive finite number */

Definition at line 121 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_POSITIVE_INFINITE   3 /* Positive infinite number */

Definition at line 123 of file bigdecimal.h.

Referenced by BigMath_s_exp(), BigMath_s_log(), and Init_bigdecimal().

#define VP_SIGN_POSITIVE_ZERO   1 /* Positive zero */

Definition at line 119 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VpBaseFig ( )    rmpd_component_figures()
#define VpBaseVal ( )    rmpd_base_value()

Definition at line 179 of file bigdecimal.h.

Referenced by BigDecimal_div(), and Init_bigdecimal().

#define VpChangeSign (   a,
 
)    {if((s)>0) (a)->sign=(short)Abs((ssize_t)(a)->sign);else (a)->sign=-(short)Abs((ssize_t)(a)->sign);}

Definition at line 250 of file bigdecimal.h.

Referenced by BigDecimal_abs(), and VpSqrt().

#define VpDblFig ( )    rmpd_double_figures()

Definition at line 178 of file bigdecimal.h.

Referenced by BigDecimal_double_fig(), and BigDecimal_sqrt().

#define VpExponent (   a)    (a->exponent)

Definition at line 279 of file bigdecimal.h.

Referenced by VpLeftRound().

#define VpGetFlag (   a)    ((a)->flag)

Definition at line 243 of file bigdecimal.h.

#define VpGetSign (   a)    (((a)->sign>0)?1:(-1))
#define VpHasVal (   a)    (a->frac[0])

Definition at line 277 of file bigdecimal.h.

Referenced by BigDecimal_div(), VpExponent10(), VpFrac(), VpLeftRound(), and VpSqrt().

#define VpIsDef (   a)    ( !(VpIsNaN(a)||VpIsInf(a)) )

Definition at line 273 of file bigdecimal.h.

Referenced by BigDecimal_power(), GetAddSubPrec(), VpComp(), VpNmlz(), and VpNumOfChars().

#define VpIsInf (   a)    (VpIsPosInf(a) || VpIsNegInf(a))
#define VpIsNaN (   a)    ((a)->sign==VP_SIGN_NaN)
#define VpIsNegInf (   a)    ((a)->sign==VP_SIGN_NEGATIVE_INFINITE)
#define VpIsNegZero (   a)    ((a)->sign==VP_SIGN_NEGATIVE_ZERO)

Definition at line 259 of file bigdecimal.h.

Referenced by VpVtoD().

#define VpIsOne (   a)    ((a->Prec==1)&&(a->frac[0]==1)&&(a->exponent==1))

Definition at line 278 of file bigdecimal.h.

Referenced by VpDivd(), VpMult(), and VpSqrt().

#define VpIsPosInf (   a)    ((a)->sign==VP_SIGN_POSITIVE_INFINITE)
#define VpIsPosZero (   a)    ((a)->sign==VP_SIGN_POSITIVE_ZERO)

Definition at line 258 of file bigdecimal.h.

Referenced by VpSzMantissa(), VpToSpecialString(), and VpVtoD().

#define VpIsZero (   a)    (VpIsPosZero(a) || VpIsNegZero(a))
#define VpMaxPrec (   a)    ((a)->MaxPrec)

Definition at line 241 of file bigdecimal.h.

Referenced by BigDecimal_dump(), and BigDecimal_inspect().

#define VpPrec (   a)    ((a)->Prec)

Definition at line 242 of file bigdecimal.h.

Referenced by BigDecimal_inspect().

#define VpSetInf (   a,
 
)    ( ((s)>0)?VpSetPosInf(a):VpSetNegInf(a) )
#define VpSetNaN (   a)    ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NaN)
#define VpSetNegInf (   a)    ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NEGATIVE_INFINITE)

Definition at line 275 of file bigdecimal.h.

Referenced by BigDecimal_power(), VpAlloc(), and VpDtoV().

#define VpSetNegZero (   a)    ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NEGATIVE_ZERO)

Definition at line 262 of file bigdecimal.h.

#define VpSetOne (   a)    {(a)->Prec=(a)->exponent=(a)->frac[0]=1;(a)->sign=VP_SIGN_POSITIVE_FINITE;}

Definition at line 255 of file bigdecimal.h.

Referenced by VpMidRound(), VpPower(), and VpSqrt().

#define VpSetPosInf (   a)    ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_POSITIVE_INFINITE)

Definition at line 274 of file bigdecimal.h.

Referenced by BigDecimal_power(), VpAlloc(), and VpDtoV().

#define VpSetPosZero (   a)    ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_POSITIVE_ZERO)

Definition at line 261 of file bigdecimal.h.

#define VpSetSign (   a,
 
)    {if((s)>0) (a)->sign=(short)VP_SIGN_POSITIVE_FINITE;else (a)->sign=(short)VP_SIGN_NEGATIVE_FINITE;}
#define VpSetZero (   a,
 
)    ( ((s)>0)?VpSetPosZero(a):VpSetNegZero(a) )

Function Documentation

static long labs ( long const  x) [inline, static]

Definition at line 31 of file bigdecimal.h.

static LONG_LONG llabs ( LONG_LONG const  x) [inline, static]

Definition at line 40 of file bigdecimal.h.

static BDIGIT rmpd_base_value ( void  ) [inline, static]

Definition at line 171 of file bigdecimal.h.

References RMPD_BASE.

static size_t rmpd_component_figures ( void  ) [inline, static]

Definition at line 173 of file bigdecimal.h.

References RMPD_COMPONENT_FIGURES.

static size_t rmpd_double_figures ( void  ) [inline, static]

Definition at line 175 of file bigdecimal.h.

References DBL_DIG.

Referenced by BigMath_s_exp(), BigMath_s_log(), and VpInit().

VP_EXPORT int VpActiveRound ( Real y,
Real x,
unsigned short  f,
ssize_t  il 
)
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 4771 of file bigdecimal.c.

References Real::exponent, Real::frac, Real::Prec, Real::sign, val, 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 
)
VP_EXPORT int VpException ( unsigned short  f,
const char *  str,
int  always 
)
VP_EXPORT ssize_t VpExponent10 ( Real a)
VP_EXPORT void VpFrac ( Real y,
Real x 
)
VP_EXPORT void VpFree ( Real pv)

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

References Zero().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoubleNegInf ( void  )

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

References One(), and VpGetDoubleNegInf().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoublePosInf ( void  )

Definition at line 3481 of file bigdecimal.c.

References One(), and Zero().

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

VP_EXPORT size_t VpGetPrecLimit ( void  )
VP_EXPORT unsigned short VpGetRoundMode ( void  )
VP_EXPORT size_t VpInit ( BDIGIT  BaseVal)
VP_EXPORT int VpIsRoundMode ( unsigned short  n)
VP_EXPORT int VpLeftRound ( Real y,
unsigned short  f,
ssize_t  nf 
)
VP_EXPORT void* VpMemAlloc ( size_t  mb)

Definition at line 3268 of file bigdecimal.c.

References VP_EXCEPTION_MEMORY, VpException(), and xmalloc.

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

Definition at line 3282 of file bigdecimal.c.

References 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,
char const str,
VALUE  klass 
)

Definition at line 559 of file bigdecimal.c.

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

Referenced by BigDecimal_load(), and BigDecimal_s_allocate().

VP_EXPORT size_t VpNumOfChars ( Real vp,
const char *  pszFmt 
)
VP_EXPORT Real* VpOne ( void  )

Definition at line 3726 of file bigdecimal.c.

References VpConstOne.

Referenced by BigDecimal_DoDivmod().

VP_EXPORT int VpPower ( Real y,
Real x,
SIGNED_VALUE  n 
)
VP_EXPORT size_t VpSetPrecLimit ( size_t  n)
VP_EXPORT unsigned short VpSetRoundMode ( unsigned short  n)
VP_EXPORT int VpSqrt ( Real y,
Real x 
)
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 5048 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 
)

Variable Documentation

Definition at line 41 of file bigdecimal.c.

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