#include #include #include static const double tol = 16 * DBL_EPSILON; NodeFactory::~NodeFactory() {} Graph const &NodeFactory::graph() const { return _graph; } bool equal(double arg1, double arg2) { if (arg1 == JAGS_NA || arg2 == JAGS_NA) return false; else return !(arg1 + tol < arg2 || arg2 + tol < arg1); } bool equal(Node const *node1, Node const *node2) { if (node1 == node2) { return true; } else if (isObserved(node1) && isObserved(node2) && node1->data.length() == node2->data.length()) { unsigned long n = node1->data.length(); double const *value1 = node1->data.value(); double const *value2 = node2->data.value(); for (unsigned long i = 0; i < n; ++i) { if (!equal(value1[i],value2[i])) { return false; } } return true; } else { return false; } }