b9bd13a9fb1cbcbabffaf93d55b415949ea8b9c5
[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         Debug("Sizeof ParanoidNumber::digit_t is %u", sizeof(ParanoidNumber::digit_t));
21         Debug("Sizeof ParanoidNumber is %u", sizeof(ParanoidNumber));
22         Debug("Sizeof double is %u", sizeof(double));
23         Debug("Sizeof ParanoidNumber* %u", sizeof(ParanoidNumber*));
24
25         string token("");
26         cin >> token;   
27         ParanoidNumber a(token.c_str());
28         double da = a.ToDouble();
29         float fa = da;
30         while (cin.good())
31         {
32                 char op;
33                 cin >> op;
34                 token = "";
35                 for (char c = cin.peek(); cin.good() && !iswspace(c); c = cin.peek())
36                 {
37                         if (c == '+' || c == '-' || c == '*' || c == '/')
38                         {
39                                 break;
40                         }
41                         token += c;
42                         c = cin.get();
43                 }
44                 //Debug("String is \"%s\"", token.c_str());
45                 float fb = strtof(token.c_str(), NULL);
46                 double db = strtod(token.c_str(), NULL);
47                 ParanoidNumber b(token.c_str());
48                 Debug("a is {%s} \"%lf\"", a.Str().c_str(), a.ToDouble());
49                 Debug("b is {%s} \"%lf\"", b.Str().c_str(), b.ToDouble());
50                 Debug("db is %lf", db);
51                 switch (op)
52                 {
53                         case '+':
54                                 a += b;
55                                 fa += fb;
56                                 da += db;
57                                 break;
58                         case '-':
59                                 a -= b;
60                                 fa -= fb;
61                                 da -= db;
62                                 break;
63                         case '*':
64                                 a *= b;
65                                 fa *= fb;
66                                 da *= db;
67                                 break;
68                         case '/':
69                                 a /= b;
70                                 fa /= fb;
71                                 da /= db;
72                                 break;
73                 }
74                         
75                 Debug("a is: {%s}", a.Str().c_str());
76                 Debug("a as double: %.40lf", a.ToDouble());
77                 Debug("a as float: %.40f", a.ToFloat());
78                 Debug("a as int64_t: %ld", a.Convert<int64_t>());
79                 Debug("floats give: %.40f", fa);
80                 Debug("double gives: %.40lf", da);
81                 
82                 
83         }
84 }

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