summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2017-03-06 17:25:45 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2021-02-01 16:40:27 +0100
commit24ec3b3e7fa09900d791dcaedb0820a0b1890336 (patch)
tree0a3d470d58fea28add839e4083c84e411cddeaa4
parent125c0fc0b7f51847d2e6c92433c82c3e8982abb0 (diff)
Prefer qHypot() over sqrt(a sum of squares)
It's apt to be more accurate and may even be optimised. Comment on a benchmark where we could use Math.hypot(), but that would break comparison with Qt 5 results. Change-Id: I7c37dd3df82fdef18e7ebb0e1548198afd256faa Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/particles/qquicktargetdirection.cpp2
-rw-r--r--tests/manual/v4/v8-bench.js1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/particles/qquicktargetdirection.cpp b/src/particles/qquicktargetdirection.cpp
index 0a0eeb4a24..5aa813be6f 100644
--- a/src/particles/qquicktargetdirection.cpp
+++ b/src/particles/qquicktargetdirection.cpp
@@ -123,7 +123,7 @@ QPointF QQuickTargetDirection::sample(const QPointF &from)
qreal theta = std::atan2(targetY, targetX);
qreal mag = m_magnitude + QRandomGenerator::global()->generateDouble() * m_magnitudeVariation * 2 - m_magnitudeVariation;
if (m_proportionalMagnitude)
- mag *= std::sqrt(targetX * targetX + targetY * targetY);
+ mag *= qHypot(targetX, targetY);
ret.setX(mag * std::cos(theta));
ret.setY(mag * std::sin(theta));
return ret;
diff --git a/tests/manual/v4/v8-bench.js b/tests/manual/v4/v8-bench.js
index bfce6231e4..33f39688c2 100644
--- a/tests/manual/v4/v8-bench.js
+++ b/tests/manual/v4/v8-bench.js
@@ -3645,6 +3645,7 @@ Flog.RayTracer.Vector.prototype = {
},
magnitude : function() {
+ // return Math.hypot(this.x, this.y, this.z); but keep results Qt5-comparable:
return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
},