Fix compiling with non doubles
[ipdf/code.git] / src / tests / paranoidcalculator.cpp
1 #include "main.h"
2 #include "real.h"
3 #include <cmath>
4 #include <cassert>
5 #include <list>
6 #include <bitset>
7 #include <iostream>
8 #include <cfloat>
9 #include <fenv.h>
10 #include "paranoidnumber.h"
11
12 using namespace std;
13 using namespace IPDF;
14
15 int main(int argc, char ** argv)
16 {
17         Debug("FLT_MAX = %.40f", FLT_MAX);
18         Debug("FLT_MIN = %.40f", FLT_MIN);
19         Debug("FLT_EPSILON = %.40f", FLT_EPSILON);
20         
21         ParanoidNumber a("0.3");
22         Debug("start at %s", a.Str().c_str());
23         cout << "0.3 ";
24         float fa = 0.3;
25         double da = 0.3;
26         while (cin.good())
27         {
28                 char op;
29                 double db;
30                 cin >> op >> db;
31                 float fb(db);
32                 ParanoidNumber b(fb);
33                 switch (op)
34                 {
35                         case '+':
36                                 a += b;
37                                 fa += fb;
38                                 da += db;
39                                 break;
40                         case '-':
41                                 a -= b;
42                                 fa -= fb;
43                                 da -= db;
44                                 break;
45                         case '*':
46                                 a *= b;
47                                 fa *= fb;
48                                 da *= db;
49                                 break;
50                         case '/':
51                                 a /= b;
52                                 fa /= fb;
53                                 da /= db;
54                                 break;
55                 }
56                         
57                 Debug("a is: %s", a.Str().c_str());
58                 Debug("a as double: %.40f\n", a.ToDouble());
59                 Debug("floats give: %.40f\n", fa);
60                 Debug("double gives: %.40f\n", da);
61                 
62                 
63         }
64 }

UCC git Repository :: git.ucc.asn.au