git.ucc.asn.au
/
ipdf
/
code.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
David's final changes: more profiler features, fixes.
[ipdf/code.git]
/
src
/
paranoidnumber.h
diff --git
a/src/paranoidnumber.h
b/src/paranoidnumber.h
index
e57d00c
..
29e15d5
100644
(file)
--- a/
src/paranoidnumber.h
+++ b/
src/paranoidnumber.h
@@
-19,12
+19,14
@@
//#define PARANOID_CACHE_RESULTS
//#define PARANOID_USE_ARENA
//#define PARANOID_CACHE_RESULTS
//#define PARANOID_USE_ARENA
-#define PARANOID_SIZE_LIMIT
0
+#define PARANOID_SIZE_LIMIT
4
// Define to compare all ops against double ops and check within epsilon
// Define to compare all ops against double ops and check within epsilon
-#define PARANOID_COMPARE_EPSILON 1e-6
+//#define PARANOID_COMPARE_EPSILON 1e-6
+#ifdef PARANOID_COMPARE_EPSILON
#define CompareForSanity(...) ParanoidNumber::CompareForSanityEx(__func__, __FILE__, __LINE__, __VA_ARGS__)
#define CompareForSanity(...) ParanoidNumber::CompareForSanityEx(__func__, __FILE__, __LINE__, __VA_ARGS__)
+#endif
namespace IPDF
{
namespace IPDF
{
@@
-87,10
+89,11
@@
namespace IPDF
ParanoidNumber(PARANOID_DIGIT_T value=0) : m_value(value), m_next()
{
#ifdef PARANOID_SIZE_LIMIT
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;
#endif
#ifdef PARANOID_CACHE_RESULTS
m_cached_result = value;
+ m_cache_valid = true;
#endif
}
#endif
}
@@
-102,6
+105,7
@@
namespace IPDF
#endif
#ifdef PARANOID_CACHE_RESULTS
m_cached_result = cpy.m_cached_result;
#endif
#ifdef PARANOID_CACHE_RESULTS
m_cached_result = cpy.m_cached_result;
+ m_cache_valid = cpy.m_cache_valid;
#endif
for (int i = 0; i < NOP; ++i)
{
#endif
for (int i = 0; i < NOP; ++i)
{
@@
-141,6
+145,8
@@
namespace IPDF
// Like this one. It isn't const.
double ToDouble() const {return (double)Digit();}
// Like this one. It isn't const.
double ToDouble() const {return (double)Digit();}
+ operator double() const {return ToDouble();}
+
// This one is probably const.
bool Floating() const
{
// This one is probably const.
bool Floating() const
{
@@
-233,8
+239,11
@@
namespace IPDF
std::string Str() const;
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)
{
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);
if (fabs(Digit() - compare) > eps)
{
Error("Called via %s(%lf) (%s:%d)", func, arg, file, line);
@@
-242,7
+251,7
@@
namespace IPDF
Fatal("This: %.30lf vs Expected: %.30lf", Digit(), compare);
}
}
Fatal("This: %.30lf vs Expected: %.30lf", Digit(), compare);
}
}
-
+ #endif
std::string PStr() const;
std::string PStr() const;
@@
-260,6
+269,7
@@
namespace IPDF
digit_t m_value;
#ifdef PARANOID_CACHE_RESULTS
digit_t m_cached_result;
digit_t m_value;
#ifdef PARANOID_CACHE_RESULTS
digit_t m_cached_result;
+ bool m_cache_valid;
#endif
std::vector<ParanoidNumber*> m_next[4];
#ifdef PARANOID_SIZE_LIMIT
#endif
std::vector<ParanoidNumber*> m_next[4];
#ifdef PARANOID_SIZE_LIMIT
@@
-270,7
+280,7
@@
namespace IPDF
class Arena
{
public:
class Arena
{
public:
- Arena(int64_t block_size = 10000
000
);
+ Arena(int64_t block_size = 10000);
~Arena();
void * allocate(size_t bytes);
~Arena();
void * allocate(size_t bytes);
@@
-303,7
+313,7
@@
template <class T>
T ParanoidNumber::Convert() const
{
#ifdef PARANOID_CACHE_RESULTS
T ParanoidNumber::Convert() const
{
#ifdef PARANOID_CACHE_RESULTS
- if (
!isnan((float(m_cached_result)))
)
+ if (
m_cache_valid
)
return (T)m_cached_result;
#endif
T value(m_value);
return (T)m_cached_result;
#endif
T value(m_value);
@@
-324,6
+334,8
@@
T ParanoidNumber::Convert() const
+
+
}
#endif //_PARANOIDNUMBER_H
}
#endif //_PARANOIDNUMBER_H
UCC
git Repository :: git.ucc.asn.au