bigdecimal.h File Reference
`#include "ruby/ruby.h"`
`#include <float.h>`

Go to the source code of this file.

## Data Structures

struct | Real

## Macros

#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 | 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 Real * | VpNewRbClass (size_t mx, char const *str, VALUE klass)
VP_EXPORT Real * | VpCreateRbObject (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 | VpFree (Real *pv)
VP_EXPORT Real * | VpAlloc (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 Real * | VpOne (void)

## Variables

VALUE | rb_cBigDecimal

## Macro Definition Documentation

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

Definition at line 227 of file bigdecimal.h.

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

Definition at line 228 of file bigdecimal.h.

Referenced by VpAlloc(), and VpSetPTR().

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

Definition at line 229 of file bigdecimal.h.

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

#define RMPD_BASE ((BDIGIT)100U)

Definition at line 71 of file bigdecimal.h.

Referenced by rmpd_base_value().

#define RMPD_COMPONENT_FIGURES 2

Definition at line 70 of file bigdecimal.h.

Referenced by rmpd_component_figures().

#define RMPD_EXCEPTION_MODE_DEFAULT 0U

Definition at line 101 of file bigdecimal.h.

Referenced by VpGetException().

#define RMPD_ROUNDING_MODE_DEFAULT VP_ROUND_HALF_UP

Definition at line 113 of file bigdecimal.h.

Referenced by VpGetRoundMode().

#define SZ_INF "Infinity"

Definition at line 79 of file bigdecimal.h.

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

#define SZ_NaN "NaN"

Definition at line 78 of file bigdecimal.h.

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

#define SZ_NINF "-Infinity"

Definition at line 81 of file bigdecimal.h.

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

#define SZ_PINF "+Infinity"

Definition at line 80 of file bigdecimal.h.

Referenced by VpAlloc().

#define vabs abs

Definition at line 48 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 90 of file bigdecimal.h.

Referenced by BigDecimal_mode(), and Init_bigdecimal().

#define VP_EXCEPTION_INFINITY ((unsigned short)0x0001)

Definition at line 91 of file bigdecimal.h.

Referenced by BigDecimal_check_num(), BigDecimal_mode(), GetAddSubPrec(), Init_bigdecimal(), ToValue(), VpCtoV(), VpException(), and VpIsDefOP().

#define VP_EXCEPTION_MEMORY ((unsigned short)0x0040)

Definition at line 99 of file bigdecimal.h.

Referenced by VpException(), and VpMemAlloc().

#define VP_EXCEPTION_NaN ((unsigned short)0x0002)

Definition at line 92 of file bigdecimal.h.

Referenced by BigDecimal_check_num(), BigDecimal_mode(), Init_bigdecimal(), ToValue(), VpDivd(), VpException(), and VpIsDefOP().

#define VP_EXCEPTION_OP ((unsigned short)0x0020)

Definition at line 98 of file bigdecimal.h.

Referenced by VpException(), and VpSqrt().

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

Definition at line 94 of file bigdecimal.h.

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

#define VP_EXCEPTION_UNDERFLOW ((unsigned short)0x0004)

Definition at line 93 of file bigdecimal.h.

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

#define VP_EXCEPTION_ZERODIVIDE ((unsigned short)0x0010)

Definition at line 95 of file bigdecimal.h.

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

#define VP_EXPORT static

Definition at line 87 of file bigdecimal.h.

#define VP_ROUND_CEIL 5

Definition at line 109 of file bigdecimal.h.

Referenced by BigDecimal_ceil(), check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_DOWN 2

Definition at line 106 of file bigdecimal.h.

Referenced by BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_fix(), BigDecimal_truncate(), check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_FLOOR 6

Definition at line 110 of file bigdecimal.h.

Referenced by BigDecimal_floor(), check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_HALF_DOWN 4

Definition at line 108 of file bigdecimal.h.

Referenced by check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_HALF_EVEN 7

Definition at line 111 of file bigdecimal.h.

Referenced by check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_HALF_UP 3

Definition at line 107 of file bigdecimal.h.

Referenced by check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_ROUND_MODE ((unsigned short)0x0100)

Definition at line 104 of file bigdecimal.h.

Referenced by BigDecimal_mode(), and Init_bigdecimal().

#define VP_ROUND_UP 1

Definition at line 105 of file bigdecimal.h.

Referenced by check_rounding_mode(), Init_bigdecimal(), VpInternalRound(), VpIsRoundMode(), and VpMidRound().

#define VP_SIGN_NaN 0 /* NaN */

Definition at line 115 of file bigdecimal.h.

Referenced by Init_bigdecimal().

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

Definition at line 119 of file bigdecimal.h.

Referenced by Init_bigdecimal().

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

Definition at line 121 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_NEGATIVE_ZERO -1 /* Negative zero */

Definition at line 117 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_POSITIVE_FINITE 2 /* Positive finite number */

Definition at line 118 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VP_SIGN_POSITIVE_INFINITE 3 /* Positive infinite number */

Definition at line 120 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 116 of file bigdecimal.h.

Referenced by Init_bigdecimal().

#define VpBaseFig | ( |  | ) | rmpd_component_figures()

Definition at line 168 of file bigdecimal.h.

Referenced by BigDecimal_abs(), BigDecimal_add(), BigDecimal_ceil(), BigDecimal_coerce(), BigDecimal_div2(), BigDecimal_divide(), BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_dump(), BigDecimal_fix(), BigDecimal_floor(), BigDecimal_frac(), BigDecimal_inspect(), BigDecimal_load(), BigDecimal_mult(), BigDecimal_neg(), BigDecimal_power(), BigDecimal_prec(), BigDecimal_round(), BigDecimal_sqrt(), BigDecimal_sub(), BigDecimal_to_i(), BigDecimal_truncate(), BigDecimalCmp(), and GetVpValueWithPrec().

#define VpBaseVal | ( |  | ) | rmpd_base_value()

Definition at line 170 of file bigdecimal.h.

Referenced by BigDecimal_div(), and Init_bigdecimal().

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

Definition at line 240 of file bigdecimal.h.

Referenced by BigDecimal_abs(), and VpSqrt().

#define VpDblFig | ( |  | ) | rmpd_double_figures()

Definition at line 169 of file bigdecimal.h.

Referenced by BigDecimal_double_fig(), and BigDecimal_sqrt().

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

Definition at line 269 of file bigdecimal.h.

Referenced by VpLeftRound().

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

Definition at line 233 of file bigdecimal.h.

#define VpGetSign | ( |  | a | ) | (((a)->sign>0)?1:(-1))

Definition at line 238 of file bigdecimal.h.

Referenced by AddExponent(), BigDecimal_add(), BigDecimal_DoDivmod(), BigDecimal_power(), BigDecimal_sub(), BigDecimal_to_i(), BigDecimal_to_r(), BigMath_s_exp(), BigMath_s_log(), VpAddSub(), VpAsgn(), VpComp(), VpDivd(), VpFrac(), VpInternalRound(), VpIsDefOP(), VpMidRound(), VpMult(), VpNmlz(), VpPower(), VpSqrt(), VpSzMantissa(), VpToFString(), VpToString(), and VpVtoD().

#define VpHasVal | ( |  | a | ) | (a->frac[0])

Definition at line 267 of file bigdecimal.h.

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

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

Definition at line 263 of file bigdecimal.h.

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

#define VpIsInf | ( |  | a | ) | (VpIsPosInf(a) || VpIsNegInf(a))

Definition at line 262 of file bigdecimal.h.

Referenced by BigDecimal_DoDivmod(), BigDecimal_IsFinite(), BigDecimal_power(), VpAsgn(), VpIsDefOP(), and VpPower().

#define VpIsNaN | ( |  | a | ) | ((a)->sign==VP_SIGN_NaN)

Definition at line 256 of file bigdecimal.h.

Referenced by BigDecimal_add(), BigDecimal_check_num(), BigDecimal_DoDivmod(), BigDecimal_IsFinite(), BigDecimal_IsNaN(), BigDecimal_power(), BigDecimal_sub(), BigMath_s_exp(), BigMath_s_log(), ToValue(), VpAsgn(), VpComp(), VpIsDefOP(), VpPower(), VpSzMantissa(), VpToSpecialString(), and VpVtoD().

#define VpIsNegInf | ( |  | a | ) | ((a)->sign==VP_SIGN_NEGATIVE_INFINITE)

Definition at line 261 of file bigdecimal.h.

Referenced by BigDecimal_check_num(), BigDecimal_IsInfinite(), BigMath_s_exp(), BigMath_s_log(), ToValue(), VpSzMantissa(), VpToSpecialString(), and VpVtoD().

#define VpIsNegZero | ( |  | a | ) | ((a)->sign==VP_SIGN_NEGATIVE_ZERO)

Definition at line 249 of file bigdecimal.h.

Referenced by VpVtoD().

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

Definition at line 268 of file bigdecimal.h.

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

#define VpIsPosInf | ( |  | a | ) | ((a)->sign==VP_SIGN_POSITIVE_INFINITE)

Definition at line 260 of file bigdecimal.h.

Referenced by BigDecimal_check_num(), BigDecimal_IsInfinite(), BigMath_s_exp(), BigMath_s_log(), ToValue(), VpPower(), VpSzMantissa(), VpToSpecialString(), and VpVtoD().

#define VpIsPosZero | ( |  | a | ) | ((a)->sign==VP_SIGN_POSITIVE_ZERO)

Definition at line 248 of file bigdecimal.h.

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

#define VpIsZero | ( |  | a | ) | (VpIsPosZero(a) || VpIsNegZero(a))

Definition at line 250 of file bigdecimal.h.

Referenced by BigDecimal_DoDivmod(), BigDecimal_nonzero(), BigDecimal_power(), BigDecimal_zero(), BigMath_s_exp(), BigMath_s_log(), rmpd_power_by_big_decimal(), VpAddSub(), VpAsgn(), VpComp(), VpDivd(), VpIsDefOP(), VpMult(), VpNmlz(), VpPower(), VpSqrt(), VpSzMantissa(), and VpToSpecialString().

#define VpMaxPrec | ( |  | a | ) | ((a)->MaxPrec)

Definition at line 231 of file bigdecimal.h.

Referenced by BigDecimal_dump(), and BigDecimal_inspect().

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

Definition at line 232 of file bigdecimal.h.

Referenced by BigDecimal_inspect().

#define VpSetInf | ( |  | a,
|  |  | s
| ) |  | ( ((s)>0)?VpSetPosInf(a):VpSetNegInf(a) )

Definition at line 266 of file bigdecimal.h.

Referenced by AddExponent(), BigDecimal_add(), BigDecimal_DoDivmod(), BigDecimal_power(), BigDecimal_sub(), BigMath_s_exp(), BigMath_s_log(), VpAsgn(), VpCtoV(), VpDivd(), VpIsDefOP(), and VpPower().

#define VpSetNaN | ( |  | a | ) | ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NaN)

Definition at line 257 of file bigdecimal.h.

Referenced by BigDecimal_power(), BigMath_s_exp(), BigMath_s_log(), VpAlloc(), VpAsgn(), VpDivd(), VpDtoV(), VpIsDefOP(), VpPower(), and VpSqrt().

#define VpSetNegInf | ( |  | a | ) | ((a)->frac[0]=0,(a)->Prec=1,(a)->sign=VP_SIGN_NEGATIVE_INFINITE)

Definition at line 265 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 252 of file bigdecimal.h.

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

Definition at line 245 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 264 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 251 of file bigdecimal.h.

#define VpSetSign | ( |  | a,
|  |  | s
| ) |  | {if((s)>0) (a)->sign=(short)VP_SIGN_POSITIVE_FINITE;else (a)->sign=(short)VP_SIGN_NEGATIVE_FINITE;}

Definition at line 242 of file bigdecimal.h.

Referenced by BigMath_s_exp(), VpAddSub(), VpAsgn(), VpCtoV(), VpDivd(), VpDtoV(), VpFrac(), VpMidRound(), VpMult(), and VpPower().

#define VpSetZero | ( |  | a,
|  |  | s
| ) |  | ( ((s)>0)?VpSetPosZero(a):VpSetNegZero(a) )

Definition at line 253 of file bigdecimal.h.

Referenced by AddExponent(), VpAddSub(), VpAlloc(), VpAsgn(), VpCtoV(), VpDivd(), VpDtoV(), VpFrac(), VpIsDefOP(), VpMidRound(), VpMult(), VpNmlz(), and VpPower().

## Function Documentation

static long labs | ( | long const | x | ) |

inline static

Definition at line 28 of file bigdecimal.h.

static LONG_LONG llabs | ( | LONG_LONG const | x | ) |

inline static

Definition at line 37 of file bigdecimal.h.

static BDIGIT rmpd_base_value | ( | void |  | ) |

inline static

Definition at line 162 of file bigdecimal.h.

References RMPD_BASE.

static size_t rmpd_component_figures | ( | void |  | ) |

inline static

Definition at line 164 of file bigdecimal.h.

References RMPD_COMPONENT_FIGURES.

static size_t rmpd_double_figures | ( | void |  | ) |

inline static

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

Definition at line 5601 of file bigdecimal.c.

References VpAsgn(), and VpMidRound().

Referenced by BigDecimal_ceil(), BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_fix(), BigDecimal_floor(), BigDecimal_round(), and BigDecimal_truncate().

VP_EXPORT size_t VpAddSub | ( | Real * | c,
|  | Real * | a,
|  | Real * | b,
|  | int | operation
| ) |  |

Definition at line 3747 of file bigdecimal.c.

References BASE_FIG, BDIGIT, Real::exponent, Real::frac, i, Min, Real::Prec, VpAddAbs(), VpAsgn(), VpGetSign, VpInternalRound(), VpIsDefOP(), VpIsZero, VpSetSign, VpSetZero, and VpSubAbs().

Referenced by BigDecimal_add(), BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_sub(), and VpSqrt().

VP_EXPORT Real* VpAlloc | ( | size_t | mx,
|  | const char * | szVal
| ) |  |

Definition at line 3552 of file bigdecimal.c.

References BASE_FIG, BDIGIT, buf, i, ISDIGIT, ISSPACE, Max, Real::MaxPrec, ne, NULL, rb_str_resize(), rb_str_tmp_new(), RSTRING_PTR, StrCmp, strlen(), SZ_INF, SZ_NaN, SZ_NINF, SZ_PINF, v, VpCtoV(), VpGetPrecLimit(), VpMemAlloc(), VpSetNaN, VpSetNegInf, VpSetPosInf, and VpSetZero.

Referenced by VpCreateRbObject(), VpInit(), VpMult(), VpNewRbClass(), VpPower(), and VpSqrt().

VP_EXPORT size_t VpAsgn | ( | Real * | c,
|  | Real * | a,
|  | int | isw
| ) |  |

Definition at line 3705 of file bigdecimal.c.

References BASE_FIG, BDIGIT, Real::exponent, Real::frac, Real::MaxPrec, Real::Prec, VpGetSign, VpInternalRound(), VpIsInf, VpIsNaN, VpIsZero, VpLimitRound(), VpSetInf, VpSetNaN, VpSetSign, and VpSetZero.

Referenced by BigDecimal_abs(), BigDecimal_neg(), VpActiveRound(), VpAddAbs(), VpAddSub(), VpDivd(), VpFrac(), VpMult(), VpPower(), VpSqrt(), and VpSubAbs().

VP_EXPORT int VpComp | ( | Real * | a,
|  | Real * | b
| ) |  |

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

Definition at line 551 of file bigdecimal.c.

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

Referenced by BigDecimal_abs(), BigDecimal_add(), BigDecimal_ceil(), BigDecimal_div2(), BigDecimal_divide(), BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_fix(), BigDecimal_floor(), BigDecimal_frac(), BigDecimal_mult(), BigDecimal_neg(), BigDecimal_power(), BigDecimal_round(), BigDecimal_sqrt(), BigDecimal_sub(), BigDecimal_truncate(), BigMath_s_exp(), BigMath_s_log(), GetVpValueWithPrec(), and rmpd_power_by_big_decimal().

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

Definition at line 4971 of file bigdecimal.c.

References BASE_FIG, BDIGIT, Real::exponent, Real::frac, i, Real::MaxPrec, ne, Real::Prec, rb_warn(), SIGNED_VALUE, VP_EXCEPTION_INFINITY, VpException(), VpNmlz(), VpSetInf, VpSetSign, VpSetZero, and zero().

Referenced by VpAlloc().

VP_EXPORT size_t VpDivd | ( | Real * | c,
|  | Real * | r,
|  | Real * | a,
|  | Real * | b
| ) |  |

Definition at line 4301 of file bigdecimal.c.

References AddExponent(), BASE, BASE_FIG, BDIGIT, BDIGIT_DBL, Real::exponent, Real::frac, i, Real::MaxPrec, Min, Real::Prec, rb_bug(), VP_EXCEPTION_NaN, VP_EXCEPTION_ZERODIVIDE, VpAsgn(), VpException(), VpGetSign, VpIsDefOP(), VpIsOne, VpIsZero, VpNmlz(), VpSetInf, VpSetNaN, VpSetSign, and VpSetZero.

Referenced by BigDecimal_div2(), BigDecimal_divide(), BigDecimal_divremain(), BigDecimal_DoDivmod(), VpPower(), and VpSqrt().

VP_EXPORT void VpDtoV | ( | Real * | m,
|  | double | d
| ) |  |

Definition at line 5186 of file bigdecimal.c.

References BASE, BDIGIT, Real::exponent, Real::frac, i, isinf(), isnan, Real::MaxPrec, ne, Real::Prec, SIGNED_VALUE, VpInternalRound(), VpSetNaN, VpSetNegInf, VpSetPosInf, VpSetSign, and VpSetZero.

Referenced by VpSqrt().

VP_EXPORT int VpException | ( | unsigned short | f,
|  | const char * | str,
|  | int | always
| ) |  |

Definition at line 3290 of file bigdecimal.c.

References rb_eFloatDomainError, rb_fatal(), rb_raise(), VP_EXCEPTION_INFINITY, VP_EXCEPTION_MEMORY, VP_EXCEPTION_NaN, VP_EXCEPTION_OP, VP_EXCEPTION_UNDERFLOW, VP_EXCEPTION_ZERODIVIDE, and VpGetException().

Referenced by AddExponent(), BigDecimal_check_num(), BigDecimal_to_f(), GetAddSubPrec(), ToValue(), VpCtoV(), VpDivd(), VpIsDefOP(), VpMemAlloc(), and VpSqrt().

VP_EXPORT ssize_t VpExponent10 | ( | Real * | a | ) |

Definition at line 4764 of file bigdecimal.c.

References BASE1, BASE_FIG, Real::exponent, Real::frac, and VpHasVal.

Referenced by BigDecimal_exponent(), BigDecimal_split(), BigDecimal_to_i(), BigDecimal_to_r(), BigMath_s_exp(), and BigMath_s_log().

VP_EXPORT void VpFrac | ( | Real * | y,
|  | Real * | x
| ) |  |

Definition at line 5695 of file bigdecimal.c.

References Real::exponent, Real::frac, Real::MaxPrec, Min, Real::Prec, VpAsgn(), VpGetSign, VpHasVal, VpNmlz(), VpSetSign, and VpSetZero.

Referenced by BigDecimal_divremain(), and BigDecimal_frac().

VP_EXPORT void VpFree | ( | Real * | pv | ) |

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

References Zero().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoubleNegInf | ( | void |  | ) |

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

References One(), and VpGetDoubleNegInf().

Referenced by VpInit(), and VpVtoD().

VP_EXPORT double VpGetDoublePosInf | ( | void |  | ) |

Definition at line 3257 of file bigdecimal.c.

References One(), and Zero().

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

VP_EXPORT size_t VpGetPrecLimit | ( | void |  | ) |

Definition at line 3133 of file bigdecimal.c.

References id_BigDecimal_precision_limit, NIL_P, NUM2SIZET, rb_thread_current(), rb_thread_local_aref(), RMPD_PRECISION_LIMIT_DEFAULT, and rmpd_set_thread_local_precision_limit.

Referenced by BigDecimal_limit(), BigDecimal_save_limit(), VpAlloc(), VpLimitRound(), and VpSetPrecLimit().

VP_EXPORT unsigned short VpGetRoundMode | ( | void |  | ) |

Definition at line 3168 of file bigdecimal.c.

References FIX2INT, id_BigDecimal_rounding_mode, NIL_P, rb_thread_current(), rb_thread_local_aref(), RMPD_ROUNDING_MODE_DEFAULT, and rmpd_set_thread_local_rounding_mode.

Referenced by BigDecimal_add2(), BigDecimal_div2(), BigDecimal_mode(), BigDecimal_mult2(), BigDecimal_round(), BigDecimal_save_rounding_mode(), BigDecimal_sub2(), VpInternalRound(), VpLimitRound(), and VpSetRoundMode().

VP_EXPORT size_t VpInit | ( | BDIGIT | BaseVal | ) |

Definition at line 3471 of file bigdecimal.c.

References BASE, BASE1, BASE_FIG, DBLE_FIG, HALF_BASE, rmpd_double_figures(), VpAlloc(), VpGetDoubleNaN(), VpGetDoubleNegInf(), VpGetDoubleNegZero(), and VpGetDoublePosInf().

Referenced by Init_bigdecimal().

VP_EXPORT int VpIsRoundMode | ( | unsigned short | n | ) |

Definition at line 3184 of file bigdecimal.c.

References VP_ROUND_CEIL, VP_ROUND_DOWN, VP_ROUND_FLOOR, VP_ROUND_HALF_DOWN, VP_ROUND_HALF_EVEN, VP_ROUND_HALF_UP, and VP_ROUND_UP.

Referenced by check_rounding_mode(), and VpSetRoundMode().

VP_EXPORT int VpLeftRound | ( | Real * | y,
|  | unsigned short | f,
|  | ssize_t | nf
| ) |  |

Definition at line 5586 of file bigdecimal.c.

References BASE_FIG, BDIGIT, Real::frac, v, VpExponent, VpHasVal, and VpMidRound().

Referenced by BigDecimal_add2(), BigDecimal_div2(), BigDecimal_mult2(), BigDecimal_sub2(), and VpLimitRound().

VP_EXPORT void* VpMemAlloc | ( | size_t | mb | ) |

Definition at line 3054 of file bigdecimal.c.

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

Referenced by VpAlloc(), and VpDup().

VP_EXPORT int VpMidRound | ( | Real * | y,
|  | unsigned short | f,
|  | ssize_t | nf
| ) |  |

Definition at line 5426 of file bigdecimal.c.

References BASE, BASE_FIG, BDIGIT, div, Real::exponent, Real::frac, i, Real::Prec, SIGNED_VALUE, v, VP_ROUND_CEIL, VP_ROUND_DOWN, VP_ROUND_FLOOR, VP_ROUND_HALF_DOWN, VP_ROUND_HALF_EVEN, VP_ROUND_HALF_UP, VP_ROUND_UP, VpGetSign, VpNmlz(), VpRdup(), VpSetOne, VpSetSign, and VpSetZero.

Referenced by VpActiveRound(), and VpLeftRound().

VP_EXPORT size_t VpMult | ( | Real * | c,
|  | Real * | a,
|  | Real * | b
| ) |  |

Definition at line 4173 of file bigdecimal.c.

References AddExponent(), BASE, BASE_FIG, BDIGIT, BDIGIT_DBL, Real::exponent, Real::frac, i, Real::MaxPrec, NULL, Real::Prec, VpAlloc(), VpAsgn(), VpFree(), VpGetSign, VpIsDefOP(), VpIsOne, VpIsZero, VpLimitRound(), VpNmlz(), VpSetSign, and VpSetZero.

Referenced by BigDecimal_divremain(), BigDecimal_DoDivmod(), BigDecimal_mult(), VpPower(), and VpSqrt().

VP_EXPORT Real* VpNewRbClass | ( | size_t | mx,
|  | char const * | 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().

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

Definition at line 3427 of file bigdecimal.c.

References BASE_FIG, Real::exponent, NULL, Real::Prec, SIGNED_VALUE, and VpIsDef.

Referenced by BigDecimal_dump(), BigDecimal_inspect(), BigDecimal_split(), BigDecimal_to_f(), and BigDecimal_to_s().

VP_EXPORT Real* VpOne | ( | void |  | ) |

Definition at line 3502 of file bigdecimal.c.

References VpConstOne.

Referenced by BigDecimal_DoDivmod().

VP_EXPORT int VpPower | ( | Real * | y,
|  | Real * | x,
|  | SIGNED_VALUE | n
| ) |  |

Definition at line 5743 of file bigdecimal.c.

References BASE_FIG, Real::exponent, Real::frac, Real::MaxPrec, NULL, Real::Prec, SIGNED_VALUE, VpAlloc(), VpAsgn(), VpDivd(), VpFree(), VpGetSign, VpIsInf, VpIsNaN, VpIsPosInf, VpIsZero, VpMult(), VpSetInf, VpSetNaN, VpSetOne, VpSetSign, and VpSetZero.

Referenced by BigDecimal_power().

VP_EXPORT size_t VpSetPrecLimit | ( | size_t | n | ) |

Definition at line 3149 of file bigdecimal.c.

References rmpd_set_thread_local_precision_limit, and VpGetPrecLimit().

Referenced by BigDecimal_add2(), BigDecimal_ceil(), BigDecimal_div2(), BigDecimal_floor(), BigDecimal_limit(), BigDecimal_mult2(), BigDecimal_round(), BigDecimal_save_limit(), BigDecimal_sub2(), and BigDecimal_truncate().

VP_EXPORT unsigned short VpSetRoundMode | ( | unsigned short | n | ) |

Definition at line 3202 of file bigdecimal.c.

References rmpd_set_thread_local_rounding_mode, VpGetRoundMode(), and VpIsRoundMode().

Referenced by BigDecimal_mode(), and BigDecimal_save_rounding_mode().

VP_EXPORT int VpSqrt | ( | Real * | y,
|  | Real * | x
| ) |  |

Definition at line 5316 of file bigdecimal.c.

References BASE, BASE_FIG, DBLE_FIG, Real::exponent, if(), maxnr, Real::MaxPrec, Min, NULL, PRIdSIZE, SIGNED_VALUE, VP_EXCEPTION_OP, VpAddSub(), VpAlloc(), VpAsgn(), VpChangeSign, VpDivd(), VpDtoV(), VpException(), VpFree(), VpGetSign, VpHasVal, VpIsOne, VpIsZero, VpMult(), VpSetNaN, VpSetOne, and VpVtoD().

Referenced by BigDecimal_sqrt().

VP_EXPORT void VpSzMantissa | ( | Real * | a,
|  | char * | psz
| ) |  |

Definition at line 4781 of file bigdecimal.c.

References BASE1, BDIGIT_DBL, Real::frac, i, Real::Prec, strlen(), SZ_INF, SZ_NaN, SZ_NINF, VpGetSign, VpIsNaN, VpIsNegInf, VpIsPosInf, VpIsPosZero, and VpIsZero.

Referenced by BigDecimal_split().

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

Definition at line 4906 of file bigdecimal.c.

References BASE, BASE1, BASE_FIG, BDIGIT, Real::exponent, Real::frac, i, Real::Prec, strlen(), VpFormatSt(), VpGetSign, and VpToSpecialString().

Referenced by BigDecimal_to_s().

VP_EXPORT int VpToSpecialString | ( | Real * | a,
|  | char * | psz,
|  | int | fPlus
| ) |  |

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

Definition at line 4860 of file bigdecimal.c.

References BASE1, BASE_FIG, BDIGIT, Real::exponent, Real::frac, i, Real::Prec, PRIdSIZE, shift(), strlen(), VpFormatSt(), VpGetSign, and VpToSpecialString().

Referenced by BigDecimal_dump(), BigDecimal_inspect(), BigDecimal_to_f(), and BigDecimal_to_s().

VP_EXPORT int VpVtoD | ( | double * | d,
|  | SIGNED_VALUE * | e,
|  | Real * | m
| ) |  |

Definition at line 5122 of file bigdecimal.c.

References BASE, BASE_FIG, DBLE_FIG, div, Real::exponent, Real::frac, Min, Real::Prec, SIGNED_VALUE, VpGetDoubleNaN(), VpGetDoubleNegInf(), VpGetDoubleNegZero(), VpGetDoublePosInf(), VpGetSign, VpIsNaN, VpIsNegInf, VpIsNegZero, VpIsPosInf, and VpIsPosZero.

Referenced by BigDecimal_to_f(), and VpSqrt().

## Variable Documentation

VALUE rb_cBigDecimal

Definition at line 41 of file bigdecimal.c.

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