Mercurial > projects > decimal
annotate src/decimal/test.d @ 4:b37c218c1442
Initial development of BCD integers
author | Paul (paul.d.anderson@comcast.net) |
---|---|
date | Thu, 18 Mar 2010 18:10:25 -0700 |
parents | |
children |
rev | line source |
---|---|
4
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
1 /** |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
2 * A D programming language implementation of the |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
3 * General Decimal Arithmetic Specification, |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
4 * Version 1.70, (25 March 2009). |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
5 * |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
6 * by Paul D. Anderson |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
7 * |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
8 * Boost Software License - Version 1.0 - August 17th, 2003 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
9 * |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
10 * Permission is hereby granted, free of charge, to any person or organization |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
11 * obtaining a copy of the software and accompanying documentation covered by |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
12 * this license (the "Software") to use, reproduce, display, distribute, |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
13 * execute, and transmit the Software, and to prepare derivative works of the |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
14 * Software, and to permit third-parties to whom the Software is furnished to |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
15 * do so, all subject to the following: |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
16 * |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
17 * The copyright notices in the Software and this entire statement, including |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
18 * the above license grant, this restriction and the following disclaimer, |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
19 * must be included in all copies of the Software, in whole or in part, and |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
20 * all derivative works of the Software, unless such copies or derivative |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
21 * works are solely in the form of machine-executable object code generated by |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
22 * a source language processor. |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
23 * |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
26 * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
27 * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
28 * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
29 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
30 * DEALINGS IN THE SOFTWARE. |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
31 **/ |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
32 module decimal.test; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
33 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
34 import decimal.decimal; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
35 import decimal.math; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
36 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
37 public void main2() { |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
38 Decimal ONE = Decimal(1); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
39 writeln("1 = ", ONE); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
40 Decimal TWO = Decimal(2); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
41 writeln("2 = ", TWO); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
42 Decimal HALF = Decimal(0.5); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
43 writeln("0.5 = ", HALF); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
44 Decimal x = sqrt(TWO); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
45 writeln("x = ", x); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
46 Decimal y = sqrt(x); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
47 writeln("y = ", y); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
48 Decimal p = TWO + x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
49 writeln("p = ", p); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
50 x = y; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
51 int i = 0; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
52 while (true) { |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
53 writeln("i = ", i); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
54 x = x + ONE/x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
55 writeln("step 0"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
56 // x = HALF (x + ONE/x); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
57 x *= HALF; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
58 writeln("step 1"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
59 Decimal np = p * ((x + ONE)/(y + ONE)); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
60 writeln("step 2"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
61 writeln("np = ", np); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
62 if (p == np) return p; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
63 writeln("step 3"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
64 p = np; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
65 writeln("step 4"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
66 x = sqrt(x); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
67 writeln("step 5"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
68 // writeln("x = ", x); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
69 Decimal oox = ONE/x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
70 // writeln("ONE/x = ", oox); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
71 // writeln ("x + ONE/x = ", x + oox); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
72 // Decimal t1 = oox + x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
73 // writeln("t1 = ", t1); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
74 // Decimal t1 = x + oox; // ONE + oox; //x + x; // + ONE/x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
75 writeln("step 6"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
76 // Decimal t2 = (y * x) + ONE; ///x; //ONE / (y + ONE); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
77 // y = ONE/x + y * x; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
78 writeln("step 7"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
79 y = (ONE/x + y * x) / (y + ONE); //t1 / t2; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
80 writeln("step 8"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
81 i++; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
82 // break; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
83 writeln("i = ", i); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
84 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
85 } |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
86 return p; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
87 } |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
88 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
89 public void main() { |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
90 writeln("Hello, world!"); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
91 /+ writeln("eTiny = ", context.eTiny); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
92 writeln("tiny min = ", Decimal(1, context.eTiny)); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
93 writeln("tiny min = ", Decimal(1, context.eTiny - 1)); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
94 writeln("max = ", context.max()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
95 writeln("max1 = ", Decimal(999999999, 99)); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
96 writeln("dig = ", context.dig()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
97 writeln("eps = ", context.epsilon()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
98 writeln("smallest = ", context.min_normal()*context.epsilon()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
99 writeln("1/epsilon = ", Decimal(1)/context.epsilon()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
100 writeln("max * min = ", context.max * context.min_normal); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
101 writeln("mant_dig = ", context.mant_dig); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
102 writeln("min_exp = ", context.min_exp); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
103 writeln("max_exp = ", context.max_exp);+/ |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
104 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
105 |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
106 // TODO: this next one goes crazy -- shows need for checks on construction |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
107 // TODO: turns out this is being converted to a double (or real) and |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
108 // then it's really weird. |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
109 // writeln("bigger = ", Decimal(999999999999)); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
110 // float f = float.max; |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
111 // TODO: convert these to assserts |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
112 /+ writeln("f.max = ", f); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
113 writeln("f.min = ", float.min); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
114 writeln("f = ", 2 * float.min); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
115 writeln("d.max = ", Decimal.max()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
116 writeln("d.min = ", Decimal.min_normal()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
117 writeln("2 * d.min = ", 2 * Decimal.min_normal()); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
118 writeln("0.1 * d.min = ", 0.1 * Decimal.min_normal());+/ |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
119 // TODO: move this to unittesting |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
120 /+ Decimal dec = Decimal(PI); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
121 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
122 dec = Decimal(PI, 19); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
123 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
124 dec = Decimal(1.3, 25); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
125 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
126 dec = Decimal(0.1, 25); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
127 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
128 dec = Decimal(2.0, 25); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
129 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
130 dec = Decimal(200.5, 25); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
131 writeln("pi = ", dec ); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
132 writeln(double.dig); |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
133 writeln(real.dig);+/ |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
134 } |
b37c218c1442
Initial development of BCD integers
Paul (paul.d.anderson@comcast.net)
parents:
diff
changeset
|
135 |