dec_number 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. data/README +20 -0
  2. data/dec_number.gemspec +13 -0
  3. data/ext/dec_number/Gemfile +4 -0
  4. data/ext/dec_number/NOTES +10 -0
  5. data/ext/dec_number/decNumber/ICU-license.html +45 -0
  6. data/ext/dec_number/decNumber/Makefile.am +3 -0
  7. data/ext/dec_number/decNumber/Makefile.in +680 -0
  8. data/ext/dec_number/decNumber/aclocal.m4 +8988 -0
  9. data/ext/dec_number/decNumber/autom4te.cache/output.0 +5107 -0
  10. data/ext/dec_number/decNumber/autom4te.cache/output.1 +6026 -0
  11. data/ext/dec_number/decNumber/autom4te.cache/output.2 +13468 -0
  12. data/ext/dec_number/decNumber/autom4te.cache/output.3 +13472 -0
  13. data/ext/dec_number/decNumber/autom4te.cache/requests +407 -0
  14. data/ext/dec_number/decNumber/autom4te.cache/traces.0 +352 -0
  15. data/ext/dec_number/decNumber/autom4te.cache/traces.1 +772 -0
  16. data/ext/dec_number/decNumber/autom4te.cache/traces.2 +591 -0
  17. data/ext/dec_number/decNumber/autom4te.cache/traces.3 +2362 -0
  18. data/ext/dec_number/decNumber/config.guess +1501 -0
  19. data/ext/dec_number/decNumber/config.h.in +142 -0
  20. data/ext/dec_number/decNumber/config.sub +1705 -0
  21. data/ext/dec_number/decNumber/configure +13468 -0
  22. data/ext/dec_number/decNumber/configure.ac +36 -0
  23. data/ext/dec_number/decNumber/decBasic.c +3908 -0
  24. data/ext/dec_number/decNumber/decCommon.c +1835 -0
  25. data/ext/dec_number/decNumber/decContext.c +437 -0
  26. data/ext/dec_number/decNumber/decContext.h +254 -0
  27. data/ext/dec_number/decNumber/decDPD.h +1185 -0
  28. data/ext/dec_number/decNumber/decDouble.c +140 -0
  29. data/ext/dec_number/decNumber/decDouble.h +155 -0
  30. data/ext/dec_number/decNumber/decNumber.c +8141 -0
  31. data/ext/dec_number/decNumber/decNumber.h +182 -0
  32. data/ext/dec_number/decNumber/decNumberLocal.h +757 -0
  33. data/ext/dec_number/decNumber/decPacked.c +220 -0
  34. data/ext/dec_number/decNumber/decPacked.h +52 -0
  35. data/ext/dec_number/decNumber/decQuad.c +135 -0
  36. data/ext/dec_number/decNumber/decQuad.h +177 -0
  37. data/ext/dec_number/decNumber/decSingle.c +71 -0
  38. data/ext/dec_number/decNumber/decSingle.h +86 -0
  39. data/ext/dec_number/decNumber/decimal128.c +553 -0
  40. data/ext/dec_number/decNumber/decimal128.h +81 -0
  41. data/ext/dec_number/decNumber/decimal32.c +476 -0
  42. data/ext/dec_number/decNumber/decimal32.h +81 -0
  43. data/ext/dec_number/decNumber/decimal64.c +839 -0
  44. data/ext/dec_number/decNumber/decimal64.h +83 -0
  45. data/ext/dec_number/decNumber/decnumber.pdf +0 -0
  46. data/ext/dec_number/decNumber/depcomp +630 -0
  47. data/ext/dec_number/decNumber/example1.c +38 -0
  48. data/ext/dec_number/decNumber/example2.c +52 -0
  49. data/ext/dec_number/decNumber/example3.c +64 -0
  50. data/ext/dec_number/decNumber/example4.c +61 -0
  51. data/ext/dec_number/decNumber/example5.c +36 -0
  52. data/ext/dec_number/decNumber/example6.c +61 -0
  53. data/ext/dec_number/decNumber/example7.c +35 -0
  54. data/ext/dec_number/decNumber/example8.c +39 -0
  55. data/ext/dec_number/decNumber/install-sh +520 -0
  56. data/ext/dec_number/decNumber/libdecNumber.a +0 -0
  57. data/ext/dec_number/decNumber/ltmain.sh +8745 -0
  58. data/ext/dec_number/decNumber/missing +376 -0
  59. data/ext/dec_number/decNumber/readme.txt +81 -0
  60. data/ext/dec_number/dec_number.c +464 -0
  61. data/ext/dec_number/extconf.rb +52 -0
  62. data/ext/dec_number/extconf2.rb +50 -0
  63. data/ext/dec_number/recompile.sh +3 -0
  64. data/ext/dec_number/test_dec_number.rb +236 -0
  65. data/ext/dec_number/test_numeric.rb +235 -0
  66. metadata +111 -0
@@ -0,0 +1,140 @@
1
+ /* ------------------------------------------------------------------ */
2
+ /* decDouble.c -- decDouble operations module */
3
+ /* ------------------------------------------------------------------ */
4
+ /* Copyright (c) IBM Corporation, 2000, 2010. All rights reserved. */
5
+ /* */
6
+ /* This software is made available under the terms of the */
7
+ /* ICU License -- ICU 1.8.1 and later. */
8
+ /* */
9
+ /* The description and User's Guide ("The decNumber C Library") for */
10
+ /* this software is included in the package as decNumber.pdf. This */
11
+ /* document is also available in HTML, together with specifications, */
12
+ /* testcases, and Web links, on the General Decimal Arithmetic page. */
13
+ /* */
14
+ /* Please send comments, suggestions, and corrections to the author: */
15
+ /* mfc@uk.ibm.com */
16
+ /* Mike Cowlishaw, IBM Fellow */
17
+ /* IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK */
18
+ /* ------------------------------------------------------------------ */
19
+ /* This module comprises decDouble operations (including conversions) */
20
+ /* ------------------------------------------------------------------ */
21
+
22
+ #include "decContext.h" // public includes
23
+ #include "decDouble.h" // ..
24
+
25
+ /* Constant mappings for shared code */
26
+ #define DECPMAX DECDOUBLE_Pmax
27
+ #define DECEMIN DECDOUBLE_Emin
28
+ #define DECEMAX DECDOUBLE_Emax
29
+ #define DECEMAXD DECDOUBLE_EmaxD
30
+ #define DECBYTES DECDOUBLE_Bytes
31
+ #define DECSTRING DECDOUBLE_String
32
+ #define DECECONL DECDOUBLE_EconL
33
+ #define DECBIAS DECDOUBLE_Bias
34
+ #define DECLETS DECDOUBLE_Declets
35
+ #define DECQTINY (-DECDOUBLE_Bias)
36
+ // parameters of next-wider format
37
+ #define DECWBYTES DECQUAD_Bytes
38
+ #define DECWPMAX DECQUAD_Pmax
39
+ #define DECWECONL DECQUAD_EconL
40
+ #define DECWBIAS DECQUAD_Bias
41
+
42
+ /* Type and function mappings for shared code */
43
+ #define decFloat decDouble // Type name
44
+ #define decFloatWider decQuad // Type name
45
+
46
+ // Utilities and conversions (binary results, extractors, etc.)
47
+ #define decFloatFromBCD decDoubleFromBCD
48
+ #define decFloatFromInt32 decDoubleFromInt32
49
+ #define decFloatFromPacked decDoubleFromPacked
50
+ #define decFloatFromPackedChecked decDoubleFromPackedChecked
51
+ #define decFloatFromString decDoubleFromString
52
+ #define decFloatFromUInt32 decDoubleFromUInt32
53
+ #define decFloatFromWider decDoubleFromWider
54
+ #define decFloatGetCoefficient decDoubleGetCoefficient
55
+ #define decFloatGetExponent decDoubleGetExponent
56
+ #define decFloatSetCoefficient decDoubleSetCoefficient
57
+ #define decFloatSetExponent decDoubleSetExponent
58
+ #define decFloatShow decDoubleShow
59
+ #define decFloatToBCD decDoubleToBCD
60
+ #define decFloatToEngString decDoubleToEngString
61
+ #define decFloatToInt32 decDoubleToInt32
62
+ #define decFloatToInt32Exact decDoubleToInt32Exact
63
+ #define decFloatToPacked decDoubleToPacked
64
+ #define decFloatToString decDoubleToString
65
+ #define decFloatToUInt32 decDoubleToUInt32
66
+ #define decFloatToUInt32Exact decDoubleToUInt32Exact
67
+ #define decFloatToWider decDoubleToWider
68
+ #define decFloatZero decDoubleZero
69
+
70
+ // Computational (result is a decFloat)
71
+ #define decFloatAbs decDoubleAbs
72
+ #define decFloatAdd decDoubleAdd
73
+ #define decFloatAnd decDoubleAnd
74
+ #define decFloatDivide decDoubleDivide
75
+ #define decFloatDivideInteger decDoubleDivideInteger
76
+ #define decFloatFMA decDoubleFMA
77
+ #define decFloatInvert decDoubleInvert
78
+ #define decFloatLogB decDoubleLogB
79
+ #define decFloatMax decDoubleMax
80
+ #define decFloatMaxMag decDoubleMaxMag
81
+ #define decFloatMin decDoubleMin
82
+ #define decFloatMinMag decDoubleMinMag
83
+ #define decFloatMinus decDoubleMinus
84
+ #define decFloatMultiply decDoubleMultiply
85
+ #define decFloatNextMinus decDoubleNextMinus
86
+ #define decFloatNextPlus decDoubleNextPlus
87
+ #define decFloatNextToward decDoubleNextToward
88
+ #define decFloatOr decDoubleOr
89
+ #define decFloatPlus decDoublePlus
90
+ #define decFloatQuantize decDoubleQuantize
91
+ #define decFloatReduce decDoubleReduce
92
+ #define decFloatRemainder decDoubleRemainder
93
+ #define decFloatRemainderNear decDoubleRemainderNear
94
+ #define decFloatRotate decDoubleRotate
95
+ #define decFloatScaleB decDoubleScaleB
96
+ #define decFloatShift decDoubleShift
97
+ #define decFloatSubtract decDoubleSubtract
98
+ #define decFloatToIntegralValue decDoubleToIntegralValue
99
+ #define decFloatToIntegralExact decDoubleToIntegralExact
100
+ #define decFloatXor decDoubleXor
101
+
102
+ // Comparisons
103
+ #define decFloatCompare decDoubleCompare
104
+ #define decFloatCompareSignal decDoubleCompareSignal
105
+ #define decFloatCompareTotal decDoubleCompareTotal
106
+ #define decFloatCompareTotalMag decDoubleCompareTotalMag
107
+
108
+ // Copies
109
+ #define decFloatCanonical decDoubleCanonical
110
+ #define decFloatCopy decDoubleCopy
111
+ #define decFloatCopyAbs decDoubleCopyAbs
112
+ #define decFloatCopyNegate decDoubleCopyNegate
113
+ #define decFloatCopySign decDoubleCopySign
114
+
115
+ // Non-computational
116
+ #define decFloatClass decDoubleClass
117
+ #define decFloatClassString decDoubleClassString
118
+ #define decFloatDigits decDoubleDigits
119
+ #define decFloatIsCanonical decDoubleIsCanonical
120
+ #define decFloatIsFinite decDoubleIsFinite
121
+ #define decFloatIsInfinite decDoubleIsInfinite
122
+ #define decFloatIsInteger decDoubleIsInteger
123
+ #define decFloatIsLogical decDoubleIsLogical
124
+ #define decFloatIsNaN decDoubleIsNaN
125
+ #define decFloatIsNegative decDoubleIsNegative
126
+ #define decFloatIsNormal decDoubleIsNormal
127
+ #define decFloatIsPositive decDoubleIsPositive
128
+ #define decFloatIsSignaling decDoubleIsSignaling
129
+ #define decFloatIsSignalling decDoubleIsSignalling
130
+ #define decFloatIsSigned decDoubleIsSigned
131
+ #define decFloatIsSubnormal decDoubleIsSubnormal
132
+ #define decFloatIsZero decDoubleIsZero
133
+ #define decFloatRadix decDoubleRadix
134
+ #define decFloatSameQuantum decDoubleSameQuantum
135
+ #define decFloatVersion decDoubleVersion
136
+
137
+ #include "decNumberLocal.h" // local includes (need DECPMAX)
138
+ #include "decCommon.c" // non-arithmetic decFloat routines
139
+ #include "decBasic.c" // basic formats routines
140
+
@@ -0,0 +1,155 @@
1
+ /* ------------------------------------------------------------------ */
2
+ /* decDouble.h -- Decimal 64-bit format module header */
3
+ /* ------------------------------------------------------------------ */
4
+ /* Copyright (c) IBM Corporation, 2000, 2010. All rights reserved. */
5
+ /* */
6
+ /* This software is made available under the terms of the */
7
+ /* ICU License -- ICU 1.8.1 and later. */
8
+ /* */
9
+ /* The description and User's Guide ("The decNumber C Library") for */
10
+ /* this software is included in the package as decNumber.pdf. This */
11
+ /* document is also available in HTML, together with specifications, */
12
+ /* testcases, and Web links, on the General Decimal Arithmetic page. */
13
+ /* */
14
+ /* Please send comments, suggestions, and corrections to the author: */
15
+ /* mfc@uk.ibm.com */
16
+ /* Mike Cowlishaw, IBM Fellow */
17
+ /* IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK */
18
+ /* ------------------------------------------------------------------ */
19
+
20
+ #if !defined(DECDOUBLE)
21
+ #define DECDOUBLE
22
+
23
+ #define DECDOUBLENAME "decimalDouble" /* Short name */
24
+ #define DECDOUBLETITLE "Decimal 64-bit datum" /* Verbose name */
25
+ #define DECDOUBLEAUTHOR "Mike Cowlishaw" /* Who to blame */
26
+
27
+ /* parameters for decDoubles */
28
+ #define DECDOUBLE_Bytes 8 /* length */
29
+ #define DECDOUBLE_Pmax 16 /* maximum precision (digits) */
30
+ #define DECDOUBLE_Emin -383 /* minimum adjusted exponent */
31
+ #define DECDOUBLE_Emax 384 /* maximum adjusted exponent */
32
+ #define DECDOUBLE_EmaxD 3 /* maximum exponent digits */
33
+ #define DECDOUBLE_Bias 398 /* bias for the exponent */
34
+ #define DECDOUBLE_String 25 /* maximum string length, +1 */
35
+ #define DECDOUBLE_EconL 8 /* exponent continuation length */
36
+ #define DECDOUBLE_Declets 5 /* count of declets */
37
+ /* highest biased exponent (Elimit-1) */
38
+ #define DECDOUBLE_Ehigh (DECDOUBLE_Emax + DECDOUBLE_Bias - (DECDOUBLE_Pmax-1))
39
+
40
+ /* Required includes */
41
+ #include "decContext.h"
42
+ #include "decQuad.h"
43
+
44
+ /* The decDouble decimal 64-bit type, accessible by all sizes */
45
+ typedef union {
46
+ uint8_t bytes[DECDOUBLE_Bytes]; /* fields: 1, 5, 8, 50 bits */
47
+ uint16_t shorts[DECDOUBLE_Bytes/2];
48
+ uint32_t words[DECDOUBLE_Bytes/4];
49
+ #if DECUSE64
50
+ uint64_t longs[DECDOUBLE_Bytes/8];
51
+ #endif
52
+ } decDouble;
53
+
54
+ /* ---------------------------------------------------------------- */
55
+ /* Routines -- implemented as decFloat routines in common files */
56
+ /* ---------------------------------------------------------------- */
57
+
58
+ /* Utilities and conversions, extractors, etc.) */
59
+ extern decDouble * decDoubleFromBCD(decDouble *, int32_t, const uint8_t *, int32_t);
60
+ extern decDouble * decDoubleFromInt32(decDouble *, int32_t);
61
+ extern decDouble * decDoubleFromPacked(decDouble *, int32_t, const uint8_t *);
62
+ extern decDouble * decDoubleFromPackedChecked(decDouble *, int32_t, const uint8_t *);
63
+ extern decDouble * decDoubleFromString(decDouble *, const char *, decContext *);
64
+ extern decDouble * decDoubleFromUInt32(decDouble *, uint32_t);
65
+ extern decDouble * decDoubleFromWider(decDouble *, const decQuad *, decContext *);
66
+ extern int32_t decDoubleGetCoefficient(const decDouble *, uint8_t *);
67
+ extern int32_t decDoubleGetExponent(const decDouble *);
68
+ extern decDouble * decDoubleSetCoefficient(decDouble *, const uint8_t *, int32_t);
69
+ extern decDouble * decDoubleSetExponent(decDouble *, decContext *, int32_t);
70
+ extern void decDoubleShow(const decDouble *, const char *);
71
+ extern int32_t decDoubleToBCD(const decDouble *, int32_t *, uint8_t *);
72
+ extern char * decDoubleToEngString(const decDouble *, char *);
73
+ extern int32_t decDoubleToInt32(const decDouble *, decContext *, enum rounding);
74
+ extern int32_t decDoubleToInt32Exact(const decDouble *, decContext *, enum rounding);
75
+ extern int32_t decDoubleToPacked(const decDouble *, int32_t *, uint8_t *);
76
+ extern char * decDoubleToString(const decDouble *, char *);
77
+ extern uint32_t decDoubleToUInt32(const decDouble *, decContext *, enum rounding);
78
+ extern uint32_t decDoubleToUInt32Exact(const decDouble *, decContext *, enum rounding);
79
+ extern decQuad * decDoubleToWider(const decDouble *, decQuad *);
80
+ extern decDouble * decDoubleZero(decDouble *);
81
+
82
+ /* Computational (result is a decDouble) */
83
+ extern decDouble * decDoubleAbs(decDouble *, const decDouble *, decContext *);
84
+ extern decDouble * decDoubleAdd(decDouble *, const decDouble *, const decDouble *, decContext *);
85
+ extern decDouble * decDoubleAnd(decDouble *, const decDouble *, const decDouble *, decContext *);
86
+ extern decDouble * decDoubleDivide(decDouble *, const decDouble *, const decDouble *, decContext *);
87
+ extern decDouble * decDoubleDivideInteger(decDouble *, const decDouble *, const decDouble *, decContext *);
88
+ extern decDouble * decDoubleFMA(decDouble *, const decDouble *, const decDouble *, const decDouble *, decContext *);
89
+ extern decDouble * decDoubleInvert(decDouble *, const decDouble *, decContext *);
90
+ extern decDouble * decDoubleLogB(decDouble *, const decDouble *, decContext *);
91
+ extern decDouble * decDoubleMax(decDouble *, const decDouble *, const decDouble *, decContext *);
92
+ extern decDouble * decDoubleMaxMag(decDouble *, const decDouble *, const decDouble *, decContext *);
93
+ extern decDouble * decDoubleMin(decDouble *, const decDouble *, const decDouble *, decContext *);
94
+ extern decDouble * decDoubleMinMag(decDouble *, const decDouble *, const decDouble *, decContext *);
95
+ extern decDouble * decDoubleMinus(decDouble *, const decDouble *, decContext *);
96
+ extern decDouble * decDoubleMultiply(decDouble *, const decDouble *, const decDouble *, decContext *);
97
+ extern decDouble * decDoubleNextMinus(decDouble *, const decDouble *, decContext *);
98
+ extern decDouble * decDoubleNextPlus(decDouble *, const decDouble *, decContext *);
99
+ extern decDouble * decDoubleNextToward(decDouble *, const decDouble *, const decDouble *, decContext *);
100
+ extern decDouble * decDoubleOr(decDouble *, const decDouble *, const decDouble *, decContext *);
101
+ extern decDouble * decDoublePlus(decDouble *, const decDouble *, decContext *);
102
+ extern decDouble * decDoubleQuantize(decDouble *, const decDouble *, const decDouble *, decContext *);
103
+ extern decDouble * decDoubleReduce(decDouble *, const decDouble *, decContext *);
104
+ extern decDouble * decDoubleRemainder(decDouble *, const decDouble *, const decDouble *, decContext *);
105
+ extern decDouble * decDoubleRemainderNear(decDouble *, const decDouble *, const decDouble *, decContext *);
106
+ extern decDouble * decDoubleRotate(decDouble *, const decDouble *, const decDouble *, decContext *);
107
+ extern decDouble * decDoubleScaleB(decDouble *, const decDouble *, const decDouble *, decContext *);
108
+ extern decDouble * decDoubleShift(decDouble *, const decDouble *, const decDouble *, decContext *);
109
+ extern decDouble * decDoubleSubtract(decDouble *, const decDouble *, const decDouble *, decContext *);
110
+ extern decDouble * decDoubleToIntegralValue(decDouble *, const decDouble *, decContext *, enum rounding);
111
+ extern decDouble * decDoubleToIntegralExact(decDouble *, const decDouble *, decContext *);
112
+ extern decDouble * decDoubleXor(decDouble *, const decDouble *, const decDouble *, decContext *);
113
+
114
+ /* Comparisons */
115
+ extern decDouble * decDoubleCompare(decDouble *, const decDouble *, const decDouble *, decContext *);
116
+ extern decDouble * decDoubleCompareSignal(decDouble *, const decDouble *, const decDouble *, decContext *);
117
+ extern decDouble * decDoubleCompareTotal(decDouble *, const decDouble *, const decDouble *);
118
+ extern decDouble * decDoubleCompareTotalMag(decDouble *, const decDouble *, const decDouble *);
119
+
120
+ /* Copies */
121
+ extern decDouble * decDoubleCanonical(decDouble *, const decDouble *);
122
+ extern decDouble * decDoubleCopy(decDouble *, const decDouble *);
123
+ extern decDouble * decDoubleCopyAbs(decDouble *, const decDouble *);
124
+ extern decDouble * decDoubleCopyNegate(decDouble *, const decDouble *);
125
+ extern decDouble * decDoubleCopySign(decDouble *, const decDouble *, const decDouble *);
126
+
127
+ /* Non-computational */
128
+ extern enum decClass decDoubleClass(const decDouble *);
129
+ extern const char * decDoubleClassString(const decDouble *);
130
+ extern uint32_t decDoubleDigits(const decDouble *);
131
+ extern uint32_t decDoubleIsCanonical(const decDouble *);
132
+ extern uint32_t decDoubleIsFinite(const decDouble *);
133
+ extern uint32_t decDoubleIsInfinite(const decDouble *);
134
+ extern uint32_t decDoubleIsInteger(const decDouble *);
135
+ extern uint32_t decDoubleIsLogical(const decDouble *);
136
+ extern uint32_t decDoubleIsNaN(const decDouble *);
137
+ extern uint32_t decDoubleIsNegative(const decDouble *);
138
+ extern uint32_t decDoubleIsNormal(const decDouble *);
139
+ extern uint32_t decDoubleIsPositive(const decDouble *);
140
+ extern uint32_t decDoubleIsSignaling(const decDouble *);
141
+ extern uint32_t decDoubleIsSignalling(const decDouble *);
142
+ extern uint32_t decDoubleIsSigned(const decDouble *);
143
+ extern uint32_t decDoubleIsSubnormal(const decDouble *);
144
+ extern uint32_t decDoubleIsZero(const decDouble *);
145
+ extern uint32_t decDoubleRadix(const decDouble *);
146
+ extern uint32_t decDoubleSameQuantum(const decDouble *, const decDouble *);
147
+ extern const char * decDoubleVersion(void);
148
+
149
+ /* decNumber conversions; these are implemented as macros so as not */
150
+ /* to force a dependency on decimal64 and decNumber in decDouble. */
151
+ /* decDoubleFromNumber returns a decimal64 * to avoid warnings. */
152
+ #define decDoubleToNumber(dq, dn) decimal64ToNumber((decimal64 *)(dq), dn)
153
+ #define decDoubleFromNumber(dq, dn, set) decimal64FromNumber((decimal64 *)(dq), dn, set)
154
+
155
+ #endif