Skip to content
Snippets Groups Projects
Commit 2bd701b8 authored by Hahn, Steven's avatar Hahn, Steven
Browse files

Avoid extra multiply in Plus and Minus


Signed-off-by: default avatarSteven Hahn <hahnse@ornl.gov>
parent e590dbd3
No related branches found
No related tags found
No related merge requests found
...@@ -22,7 +22,7 @@ void Minus::performBinaryOperation(const HistogramData::Histogram &lhs, ...@@ -22,7 +22,7 @@ void Minus::performBinaryOperation(const HistogramData::Histogram &lhs,
HistogramData::HistogramY &YOut, HistogramData::HistogramY &YOut,
HistogramData::HistogramE &EOut) { HistogramData::HistogramE &EOut) {
std::transform(lhs.y().begin(), lhs.y().end(), rhs.y().begin(), YOut.begin(), std::transform(lhs.y().begin(), lhs.y().end(), rhs.y().begin(), YOut.begin(),
std::minus<double>()); std::minus<>());
std::transform(lhs.e().begin(), lhs.e().end(), rhs.e().begin(), EOut.begin(), std::transform(lhs.e().begin(), lhs.e().end(), rhs.e().begin(), EOut.begin(),
VectorHelper::SumGaussError<double>()); VectorHelper::SumGaussError<double>());
} }
...@@ -33,12 +33,14 @@ void Minus::performBinaryOperation(const HistogramData::Histogram &lhs, ...@@ -33,12 +33,14 @@ void Minus::performBinaryOperation(const HistogramData::Histogram &lhs,
HistogramData::HistogramE &EOut) { HistogramData::HistogramE &EOut) {
using std::placeholders::_1; using std::placeholders::_1;
std::transform(lhs.y().begin(), lhs.y().end(), YOut.begin(), std::transform(lhs.y().begin(), lhs.y().end(), YOut.begin(),
std::bind(std::minus<double>(), _1, rhsY)); [rhsY](const double &l) { return l - rhsY; });
// Only do E if non-zero, otherwise just copy // Only do E if non-zero, otherwise just copy
if (rhsE != 0) if (rhsE != 0) {
std::transform(lhs.e().begin(), lhs.e().end(), EOut.begin(), double rhsE2 = rhsE * rhsE;
std::bind(VectorHelper::SumGaussError<double>(), _1, rhsE)); std::transform(
else lhs.e().begin(), lhs.e().end(), EOut.begin(),
[rhsE2](const double &l) { return std::sqrt(l * l + rhsE2); });
} else
EOut = lhs.e(); EOut = lhs.e();
} }
......
...@@ -24,7 +24,7 @@ void Plus::performBinaryOperation(const HistogramData::Histogram &lhs, ...@@ -24,7 +24,7 @@ void Plus::performBinaryOperation(const HistogramData::Histogram &lhs,
HistogramData::HistogramY &YOut, HistogramData::HistogramY &YOut,
HistogramData::HistogramE &EOut) { HistogramData::HistogramE &EOut) {
std::transform(lhs.y().begin(), lhs.y().end(), rhs.y().begin(), YOut.begin(), std::transform(lhs.y().begin(), lhs.y().end(), rhs.y().begin(), YOut.begin(),
std::plus<double>()); std::plus<>());
std::transform(lhs.e().begin(), lhs.e().end(), rhs.e().begin(), EOut.begin(), std::transform(lhs.e().begin(), lhs.e().end(), rhs.e().begin(), EOut.begin(),
VectorHelper::SumGaussError<double>()); VectorHelper::SumGaussError<double>());
} }
...@@ -36,12 +36,15 @@ void Plus::performBinaryOperation(const HistogramData::Histogram &lhs, ...@@ -36,12 +36,15 @@ void Plus::performBinaryOperation(const HistogramData::Histogram &lhs,
HistogramData::HistogramE &EOut) { HistogramData::HistogramE &EOut) {
using std::placeholders::_1; using std::placeholders::_1;
std::transform(lhs.y().begin(), lhs.y().end(), YOut.begin(), std::transform(lhs.y().begin(), lhs.y().end(), YOut.begin(),
std::bind(std::plus<double>(), _1, rhsY)); [rhsY](const double &l) { return l + rhsY; });
// Only do E if non-zero, otherwise just copy // Only do E if non-zero, otherwise just copy
if (rhsE != 0)
std::transform(lhs.e().begin(), lhs.e().end(), EOut.begin(), if (rhsE != 0.) {
std::bind(VectorHelper::SumGaussError<double>(), _1, rhsE)); double rhsE2 = rhsE * rhsE;
else std::transform(
lhs.e().begin(), lhs.e().end(), EOut.begin(),
[rhsE2](const double &l) { return std::sqrt(l * l + rhsE2); });
} else
EOut = lhs.e(); EOut = lhs.e();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment