7 #define EXACTMATH_HPP 1 12 #include <boost/array.hpp> 23 void fastTwoSum(
double a,
double b,
double& res,
double& err);
31 void fastTwoDiff(
double a,
double b,
double& res,
double& err);
39 void twoSum(
double a,
double b,
double& res,
double& err);
47 void twoDiff(
double a,
double b,
double& res,
double& err);
54 void split(
double num,
double& high,
double& low);
62 void twoProduct(
double a,
double b,
double& res,
double& err);
69 void square(
double num,
double& res,
double& err);
76 boost::array<double,3>
twoOneSum(boost::array<double,2>
const& a,
double b);
83 boost::array<double,3>
twoOneDiff(boost::array<double,2>
const& a,
double b);
90 vector<double>
twoTwoSum(boost::array<double,2>
const& a,boost::array<double,2>
const& b);
97 vector<double>
twoTwoDiff(boost::array<double,2>
const& a, boost::array<double,2>
const& b);
133 vector<double> &result);
139 vector<double>
compress(vector<double>
const& e);
145 double estimate(vector<double>
const& e);
147 #endif //EXACTMATH_HPP vector< double > expansionSumZeroElim(vector< double > const &e, vector< double > const &f)
Adds up two expansions.
void twoDiff(double a, double b, double &res, double &err)
Difference between two numbers.
boost::array< double, 3 > twoOneSum(boost::array< double, 2 > const &a, double b)
Calculates the sum of a two-expansion and a double.
double estimate(vector< double > const &e)
Calculate a double precision approximation of the expansion.
vector< double > growExpansionZeroElim(vector< double > const &e, double b)
Adds a scalar to an existing expansion.
vector< double > twoTwoSum(boost::array< double, 2 > const &a, boost::array< double, 2 > const &b)
Calculates the sum of two two-expansions.
void twoProduct(double a, double b, double &res, double &err)
Product of two number.
vector< double > compress(vector< double > const &e)
Compresses an expansion.
void twoSum(double a, double b, double &res, double &err)
Calculates the sum of a and b.
void fastTwoDiff(double a, double b, double &res, double &err)
Subtracts two numbers.
boost::array< double, 3 > twoOneDiff(boost::array< double, 2 > const &a, double b)
Calculates the difference between a two-expansion and a double.
vector< double > twoTwoDiff(boost::array< double, 2 > const &a, boost::array< double, 2 > const &b)
Calculates the difference between two two-expansions.
double min(vector< double > const &v)
Returns the minimal term in a vector.
void split(double num, double &high, double &low)
Splits a given number into two, Used for multiplication.
vector< double > fastExpansionSumZeroElim(vector< double > const &e, vector< double > const &f)
Adds up two expansions.
void scaleExpansionZeroElim(vector< double > const &e, double b, vector< double > &result)
Multiplies a scalar by an expansion.
void fastTwoSum(double a, double b, double &res, double &err)
Calculates the sum of two numbers.
vector< double > linearExpansionSumZeroElim(vector< double > const &e, vector< double > const &f)
Adds up two expansions.
void square(double num, double &res, double &err)
Calculates the square of a number.