aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-08-13 11:24:35 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-08-13 11:24:35 +0000
commita3ee88517c7ecef0f29c7af15af31db5dd18d451 (patch)
tree6a28cb3bf25d14857d4b2a205c8c1daa7cc9c0b8 /libstdc++-v3
parent0bcb976e6ad80e999b64c8e0f0e3a8852b79968d (diff)
downloadgcc-a3ee88517c7ecef0f29c7af15af31db5dd18d451.zip
gcc-a3ee88517c7ecef0f29c7af15af31db5dd18d451.tar.gz
gcc-a3ee88517c7ecef0f29c7af15af31db5dd18d451.tar.bz2
re PR libstdc++/62118 (cases under libstdc++-v3/testsuite/ext/ failed on aarch64/arm)
2014-08-13 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/62118 * include/ext/random.tcc (uniform_on_sphere_helper<2, _RealType>:: operator()): Use std::hypot only when _GLIBCXX_USE_C99_MATH_TR1. From-SVN: r213906
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/ext/random.tcc10
2 files changed, 14 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7b411f3..0f51eb4 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2014-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/62118
+ * include/ext/random.tcc (uniform_on_sphere_helper<2, _RealType>::
+ operator()): Use std::hypot only when _GLIBCXX_USE_C99_MATH_TR1.
+
2014-08-12 Jonathan Wakely <jwakely@redhat.com>
* include/bits/basic_string.h (getline): Qualify call to prevent ADL
diff --git a/libstdc++-v3/include/ext/random.tcc b/libstdc++-v3/include/ext/random.tcc
index 997c204..9aef359 100644
--- a/libstdc++-v3/include/ext/random.tcc
+++ b/libstdc++-v3/include/ext/random.tcc
@@ -1547,10 +1547,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<std::size_t _Dimen, typename _RealType>
class uniform_on_sphere_helper
{
- typedef typename uniform_on_sphere_distribution<_Dimen, _RealType>::result_type result_type;
+ typedef typename uniform_on_sphere_distribution<_Dimen, _RealType>::
+ result_type result_type;
public:
- template<typename _NormalDistribution, typename _UniformRandomNumberGenerator>
+ template<typename _NormalDistribution,
+ typename _UniformRandomNumberGenerator>
result_type operator()(_NormalDistribution& __nd,
_UniformRandomNumberGenerator& __urng)
{
@@ -1604,9 +1606,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
while (__sq == _RealType(0) || __sq > _RealType(1));
+#if _GLIBCXX_USE_C99_MATH_TR1
// Yes, we do not just use sqrt(__sq) because hypot() is more
// accurate.
auto __norm = std::hypot(__ret[0], __ret[1]);
+#else
+ auto __norm = std::sqrt(__ret[0] * __ret[0] + __ret[1] * __ret[1]);
+#endif
__ret[0] /= __norm;
__ret[1] /= __norm;