d_real_const_pi;
extern const qd_real qd_real_const_2pi;
extern const qd_real qd_real_const_4pi;
extern const qd_real qd_real_const_pi2;
extern const qd_real qd_real_const_pi4;
extern const qd_real qd_real_const_1_pi;
extern const qd_real qd_real_const_2_pi;
extern const qd_real qd_real_const_4_pi;
extern const qd_real qd_real_const_1_2pi;
extern const qd_real qd_real_const_ln2;
extern const qd_real qd_real_const_ln10;
extern const qd_real qd_real_const_nan;
extern const qd_real qd_real_const_inf;
extern const qd_real qd_real_const_minf;
extern const qd_real qd_real_const_epsilon;
extern const qd_real qd_real_const_max;
/* Additional constants. */
extern const qd_real qd_real_const_cbrt2;
extern const qd_real qd_real_const_cbrt4;
extern const qd_real qd_real_const_e;
extern const qd_real qd_real_const_log2;
extern const qd_real qd_real_const_log10;
#ifndef QD_INLINE
/* Set and Read */
inline void qd_real::read(const char *s) {
d_real(s, &x[0], &x[1], &x[2], &x[3]);
}
inline void qd_real::read(const char *s, int &read) {
read = d_real(s, &x[0], &x[1], &x[2], &x[3]);
}
inline void qd_real::write(char *s) const {
d_real(s, x[0], x[1], x[2], x[3]);
}
inline void qd_real::write(char *s, int &written) const {
written = d_real(s, x[0], x[1], x[2], x[3]);
}
inline void qd_real::accumulate(const char *s) {
d_real_add(s, &x[0], &x[1], &x[2], &x[3]);
}
inline void qd_real::accumulate(const char *s, int &read) {
read = d_real_add(s, &x[0], &x[1], &x[2], &x[3]);
}
inline void qd_real::read_x(const double *a) {
x[0] = a[0];
x[1] = a[1];
x[2] = a[2];
x[3] = a[3];
}
inline void qd_real::write_x(double *a) const {
a[0] = x[0];
a[1] = x[1];
a[2] = x[2];
a[3] = x[3];
}
inline double qd_real::get_d() const {
return x[0];
}
inline double qd_real::get_d1() const {
return x[1];
}
inline double qd_real::get_d2() const {
return x[2];
}
inline double qd_real::get_d3() const {
return x[3];
}
inline double qd_real::get_x() const {
return x[0];
}
inline double qd_real::get_x1() const {
return x[1];
}
inline double qd_real::get_x2() const {
return x[2];
}
inline double qd_real::get_x3() const {
return x[3];
}
inline void qd_real::set_d(double a) {
x[0] = a;
}
inline void qd_real::set_d1(double a) {
x[1] = a;
}
inline void qd_real::set_d2(double a) {
x[2] = a;
}
inline void qd_real::set_d3(double a) {
x[3] = a;
}
inline void qd_real::set_x(double a) {
x[0] = a;
x[1] = 0.0;
x[2] = 0.0;
x[3] = 0.0;
}
inline void qd_real::set_x1(double a) {
x[1] = a;
}
inline void qd_real::set_x2(double a) {
x[2] = a;
}
inline void qd_real::set_x3(double a) {
x[3] = a;
}
/* Operators */
inline qd_real &qd_real::operator=(double a) {
x[0] = a;
x[1] = 0.0;
x[2] = 0.0;
x[3] = 0.0;
return *this;
}
inline qd_real &qd_real::operator+=(double a) {
x[0] += a;
return *this;
}
inline qd_real &qd_real::operator+=(const dd_real &a) {
x[0] += a.x[0];
x[1] += a.x[1];
return *this;
}
inline qd_real &qd_real::operator+=(const qd_real &a) {
x[0] += a.x[0];
x[1] += a.x[1];
x[2] += a.x[2];
x[3] += a.x[3];
return *this;
}
inline qd_real &qd_real::operator-=(double a) {
x[0] -= a;
return *this;
}
inline qd_real &qd_real::operator-=(const dd_real &a) {
x[0] -= a.x[0];
x[1] -= a.x[1];
return *this;
}
inline qd_real &qd_real::operator-=(const qd_real &a) {
x[0] -= a.x[0];
x[1] -= a.x[1];
x[2] -= a.x[2];
x[3] -= a.x[3];
return *this;
}
inline qd_real &qd_real::operator*=(double a) {
qd_real t;
t = a;
*this *= t;
return *this;
}
inline qd_real &qd_real::operator*=(const dd_real &a) {
qd_real t;
t = a;
*this *= t;
return *this;
}
inline qd_real &qd_real::operator*=(const qd_real &a) {
qd_real t;
d_qmul(&t.x[0], &x[0], &a.x[0]);
*this = t;
return *this;
}
inline qd_real &qd_real::operator/=(double a) {
qd_real t;
t = a;
*this /= t;
return *this;
}
inline qd_real &qd_real::operator/=(const dd_real &a) {
qd_real t;
t = a;
*this /= t;
return *this;
}
inline qd_real &qd_real::operator/=(const qd_real &a) {
qd_real t;
d_qdiv(&t.x[0], &x[0], &a.x[0]);
*this = t;
return *this;
}
inline qd_real &qd_real::operator++() {
x[0] += 1.0;
return *this;
}
inline qd_real &qd_real::operator–() {
x[0] -= 1.0;
return *this;
}
inline qd_real qd_real::operator-() const {
qd_real r;
r.x[0] = -x[0];
r.x[1] = -x[1];
r.x[2] = -x[2];
r.x[3] = -x[3];
return r;
}
inline qd_real qd_real::operator+() const {
return (*this);
}
/* Functions */
inline qd_real sqr(const qd_real &a) {
qd_real r;
d_qmul(&r.x[0], &a.x[0], &a.x[0]);
return r;
}
inline qd_real sqrt(const qd_real &a) {
qd_real r;
d_qsqrt(&r.x[0], &a.x[0]);
return r;
}
inline qd_real recip(const qd_real &a) {
qd_real r;
d_qrecip(&r.x[0], &a.x[0]);
return r;
}
inline qd_real sqrt(const qd_real &a, qd_real &err) {
qd_real r;
d_qsqrt(&r.x[0], &err.x[0], &a.x[0]);
return r;
}
inline qd_real recip(const qd_real &a, qd_real &err) {
qd_real r;
d_qrecip(&r.x[0], &err.x[0], &a.x[0]);
return r;
}
inline qd_real nint(const qd_real &a) {
qd_real r;
d_nint(&r.x[0], &a.x[0]);
return r;
}
inline qd_real d_sign(const qd_real &a, const qd_real &b) {
qd_real r;
d_sign(&r.x[0], &a.x[0], &b.x[0]);
return r;
}
inline qd_real qd_real::operator++(int) {
qd_real r = *this;
x[0] += 1.0;
return r;
}
inline qd_real qd_real::operator–(int) {
qd_real r = *this;
x[0] -= 1.0;
return r;
}
#endif /* QD_INLINE */
#endif /* _QD_QD_REAL_H */