]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/62118 (cases under libstdc++-v3/testsuite/ext/ failed on aarch64...
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 13 Aug 2014 11:24:35 +0000 (11:24 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 13 Aug 2014 11:24:35 +0000 (11:24 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/random.tcc

index 7b411f3e60ddd0ae9909ef9ea4a66d07ed8d55d0..0f51eb493cfa0e5bb74905fb2ade42ede7d2032f 100644 (file)
@@ -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
index 997c204ffe223dc8def2d6d431df28da8fab499a..9aef359adc91e91025ed8db4499178bf53827c6e 100644 (file)
@@ -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;