2018-03-13 10:54:07 +02:00
|
|
|
#ifndef KAHANSUM_H
|
|
|
|
#define KAHANSUM_H
|
|
|
|
|
|
|
|
static inline void kahaninit(double *sum, double *compensation) {
|
|
|
|
sum = 0;
|
|
|
|
compensation = 0;
|
|
|
|
}
|
|
|
|
|
2018-03-13 10:54:32 +02:00
|
|
|
static inline void kahanadd(double *sum, double *compensation, double input) {
|
2018-03-13 10:54:07 +02:00
|
|
|
double compensated_input = input - *compensation;
|
|
|
|
double nsum = *sum + compensated_input;
|
|
|
|
*compensation = (nsum - *sum) - compensated_input;
|
|
|
|
*sum = nsum;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline void ckahaninit(complex double *sum, complex double *compensation) {
|
|
|
|
sum = 0;
|
|
|
|
compensation = 0;
|
|
|
|
}
|
|
|
|
|
2018-03-13 10:54:32 +02:00
|
|
|
static inline void ckahanadd(complex double *sum, complex double *compensation, complex double input) {
|
2018-03-13 10:54:07 +02:00
|
|
|
complex double compensated_input = input - *compensation;
|
|
|
|
complex double nsum = *sum + compensated_input;
|
|
|
|
*compensation = (nsum - *sum) - compensated_input;
|
|
|
|
*sum = nsum;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif //KAHANSUM_H
|