2#ifndef PRECISE_SUMS_GPU_H
3#define PRECISE_SUMS_GPU_H
5struct __align__(16) quad_double {
9 constexpr visible quad_double(
const double x = 0.0,
const double comp = 0.0)
11 , compensation(comp) {
14 visible
inline __attribute__((always_inline)) quad_double &operator=(
const quad_double &x) {
16 compensation = x.compensation;
21 visible
inline __attribute__((always_inline)) quad_double operator+(
const quad_double &x)
const {
23 double new_compensation = compensation;
24 _2Sum_acc(new_val, new_compensation, x.val);
25 new_compensation += x.compensation;
26 return quad_double(new_val, new_compensation);
29 visible
inline __attribute__((always_inline)) quad_double &operator+=(
const quad_double &x) {
30 _2Sum_acc(val, compensation, x.val);
31 compensation += x.compensation;
35 visible
inline __attribute__((always_inline))
void correct() {
41quad_double *alloc_quad_double_sum_field(
int n);