Google OR-Tools
v9.15
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
accurate_sum.h
Go to the documentation of this file.
1
// Copyright 2010-2025 Google LLC
2
// Licensed under the Apache License, Version 2.0 (the "License");
3
// you may not use this file except in compliance with the License.
4
// You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software
9
// distributed under the License is distributed on an "AS IS" BASIS,
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
// See the License for the specific language governing permissions and
12
// limitations under the License.
13
14
#ifndef ORTOOLS_BASE_ACCURATE_SUM_H_
15
#define ORTOOLS_BASE_ACCURATE_SUM_H_
16
17
namespace
operations_research
{
18
19
// Kahan summation compensation algorithm.
20
//
21
// http://en.wikipedia.org/wiki/Kahan_summation_algorithm
22
template
<
typename
FpNumber>
23
class
AccurateSum
{
24
public
:
25
// You may copy-construct an AccurateSum.
26
AccurateSum
() : sum_(), error_sum_() {}
27
28
// Adds an FpNumber to the sum.
29
void
Add
(
const
FpNumber& value) {
30
error_sum_ += value;
31
const
FpNumber new_sum = sum_ + error_sum_;
32
error_sum_ += sum_ - new_sum;
33
sum_ = new_sum;
34
}
35
36
// Gets the value of the sum.
37
FpNumber
Value
()
const
{
return
sum_; }
38
39
private
:
40
FpNumber sum_;
41
FpNumber error_sum_;
42
};
43
44
}
// namespace operations_research
45
46
#endif
// ORTOOLS_BASE_ACCURATE_SUM_H_
operations_research::AccurateSum::Add
void Add(const FpNumber &value)
Definition
accurate_sum.h:29
operations_research::AccurateSum::Value
FpNumber Value() const
Definition
accurate_sum.h:37
operations_research::AccurateSum::AccurateSum
AccurateSum()
Definition
accurate_sum.h:26
operations_research
OR-Tools root namespace.
Definition
binary_indexed_tree.h:21
ortools
base
accurate_sum.h
Generated by
1.15.0