#include <cassert> // it's going to be ok
#include <set>
-#define PARANOID_DIGIT_T double // we could theoretically replace this with a template
+#define PARANOID_DIGIT_T float // we could theoretically replace this with a template
// but let's not do that...
//#define PARANOID_CACHE_RESULTS
//#define PARANOID_USE_ARENA
-#define PARANOID_SIZE_LIMIT 0
+#define PARANOID_SIZE_LIMIT 10
// Define to compare all ops against double ops and check within epsilon
-#define PARANOID_COMPARE_EPSILON 1e-6
+//#define PARANOID_COMPARE_EPSILON 1e-
+#ifdef PARANOID_COMPARE_EPSILON
#define CompareForSanity(...) ParanoidNumber::CompareForSanityEx(__func__, __FILE__, __LINE__, __VA_ARGS__)
+#endif
namespace IPDF
{
ParanoidNumber(PARANOID_DIGIT_T value=0) : m_value(value), m_next()
{
#ifdef PARANOID_SIZE_LIMIT
- m_size = 0;
+ m_size = 1;
#endif
#ifdef PARANOID_CACHE_RESULTS
m_cached_result = value;
std::string Str() const;
+ #ifdef PARANOID_COMPARE_EPSILON
inline void CompareForSanityEx(const char * func, const char * file, int line, const digit_t & compare, const digit_t & arg, const digit_t & eps = PARANOID_COMPARE_EPSILON)
{
+ if (!SanityCheck())
+ Fatal("This is insane!");
if (fabs(Digit() - compare) > eps)
{
Error("Called via %s(%lf) (%s:%d)", func, arg, file, line);
Fatal("This: %.30lf vs Expected: %.30lf", Digit(), compare);
}
}
-
+ #endif
std::string PStr() const;