コード例 #1
0
int test_error_vec (const DualVector& random_vec,
                    const Vector& error_vec)
{
  using std::max;
  using std::fabs;

  typedef typename ValueType<Vector>::type Scalar;

  static const Scalar tol = std::numeric_limits<Scalar>::epsilon() * 10;

  Scalar max_abs_error = 0;

  for (unsigned int i=0; i != error_vec.size(); ++i)
    {
      max_abs_error = max(max_abs_error, fabs(error_vec.raw_at(i)));

      // Handle NaNs properly.  Testing max_abs_error for NaN is
      // impossible because IEEE sucks:
      // https://en.wikipedia.org/wiki/IEEE_754_revision#min_and_max
      if (max_abs_error > tol || error_vec[i] != error_vec[i])
        {
	  std::cerr << "Value " << random_vec.raw_at(i) <<
		       "\nError " << error_vec.raw_at(i) <<
		       "\nTol   " << tol << std::endl;
	  return 1;
        }
    }

  return 0;
}
コード例 #2
0
int test_error_vec (const DualVector& random_vec,
                    const Vector& error_vec)
{
  using std::max;
  using std::fabs;

  typedef typename ValueType<Vector>::type Scalar;

  static const Scalar tol = std::numeric_limits<Scalar>::epsilon() * 10;

  Scalar max_abs_error = 0;

  for (unsigned int i=0; i != error_vec.size(); ++i)
    {
      max_abs_error = max(max_abs_error, fabs(error_vec.raw_at(i)));

      if (max_abs_error > tol)
        {
	  std::cerr << "Value " << random_vec.raw_at(i) <<
		       "\nError " << error_vec.raw_at(i) <<
		       "\nTol   " << tol << std::endl;
	  return 1;
        }
    }

  return 0;
}