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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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