Break maths some more
[ipdf/code.git] / src / tests / paranoidcalculator.cpp
index 171eaf0..eb30860 100644 (file)
@@ -17,19 +17,35 @@ int main(int argc, char ** argv)
        Debug("FLT_MAX = %.40f", FLT_MAX);
        Debug("FLT_MIN = %.40f", FLT_MIN);
        Debug("FLT_EPSILON = %.40f", FLT_EPSILON);
-       
-       ParanoidNumber a("0.3");
-       Debug("start at %s", a.Str().c_str());
-       cout << "0.3 ";
-       float fa = 0.3;
-       double da = 0.3;
+       Debug("Sizeof ParanoidNumber::digit_t is %u", sizeof(ParanoidNumber::digit_t));
+       Debug("Sizeof ParanoidNumber is %u", sizeof(ParanoidNumber));
+       Debug("Sizeof double is %u", sizeof(double));
+       Debug("Sizeof ParanoidNumber* %u", sizeof(ParanoidNumber*));
+
+       string token("");
+       cin >> token;   
+       ParanoidNumber a(token.c_str());
+       double da = a.ToDouble();
+       float fa = da;
        while (cin.good())
        {
                char op;
-               double db;
-               cin >> op >> db;
-               float fb(db);
-               ParanoidNumber b(fb);
+               cin >> op;
+               token = "";
+               for (char c = cin.peek(); cin.good() && !iswspace(c); c = cin.peek())
+               {
+                       if (c == '+' || c == '-' || c == '*' || c == '/')
+                       {
+                               break;
+                       }
+                       token += c;
+                       c = cin.get();
+               }
+               Debug("String is %s", token.c_str());
+               float fb = strtof(token.c_str(), NULL);
+               double db = strtod(token.c_str(), NULL);
+               ParanoidNumber b(token.c_str());
+               Debug("b is {%s} %lf", b.Str().c_str(), b.ToDouble());
                switch (op)
                {
                        case '+':
@@ -56,6 +72,8 @@ int main(int argc, char ** argv)
                        
                Debug("a is: %s", a.Str().c_str());
                Debug("a as double: %.40f\n", a.ToDouble());
+               Debug("a as float: %.40f\n", a.ToFloat());
+               Debug("a as int64_t: %ld\n", a.Convert<int64_t>());
                Debug("floats give: %.40f\n", fa);
                Debug("double gives: %.40f\n", da);
                

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