[cfe-commits] [libcxx] r119703 - /libcxx/trunk/include/random

Howard Hinnant hhinnant at apple.com
Thu Nov 18 09:01:36 PST 2010


Author: hhinnant
Date: Thu Nov 18 11:01:36 2010
New Revision: 119703

URL: http://llvm.org/viewvc/llvm-project?rev=119703&view=rev
Log:
LWG 1439

Modified:
    libcxx/trunk/include/random

Modified: libcxx/trunk/include/random
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/random?rev=119703&r1=119702&r2=119703&view=diff
==============================================================================
--- libcxx/trunk/include/random (original)
+++ libcxx/trunk/include/random Thu Nov 18 11:01:36 2010
@@ -5922,10 +5922,9 @@
 
     class _LIBCPP_VISIBLE param_type
     {
-        typedef typename common_type<double, result_type>::type __area_type;
         vector<result_type> __b_;
-        vector<double> __densities_;
-        vector<__area_type> __areas_;
+        vector<result_type> __densities_;
+        vector<result_type> __areas_;
     public:
         typedef piecewise_constant_distribution distribution_type;
 
@@ -5943,7 +5942,7 @@
         _LIBCPP_INLINE_VISIBILITY
         vector<result_type> intervals() const {return __b_;}
         _LIBCPP_INLINE_VISIBILITY
-        vector<double> densities() const {return __densities_;}
+        vector<result_type> densities() const {return __densities_;}
 
         friend _LIBCPP_INLINE_VISIBILITY
             bool operator==(const param_type& __x, const param_type& __y)
@@ -6014,7 +6013,7 @@
     _LIBCPP_INLINE_VISIBILITY
     vector<result_type> intervals() const {return __p_.intervals();}
     _LIBCPP_INLINE_VISIBILITY
-    vector<double> densities() const {return __p_.densities();}
+    vector<result_type> densities() const {return __p_.densities();}
 
     _LIBCPP_INLINE_VISIBILITY
     param_type param() const {return __p_;}
@@ -6070,13 +6069,13 @@
 piecewise_constant_distribution<_RealType>::param_type::__init()
 {
     // __densities_ contains non-normalized areas
-    __area_type __total_area = _STD::accumulate(__densities_.begin(),
+    result_type __total_area = _STD::accumulate(__densities_.begin(),
                                                 __densities_.end(),
-                                                __area_type());
+                                                result_type());
     for (size_t __i = 0; __i < __densities_.size(); ++__i)
         __densities_[__i] /= __total_area;
     // __densities_ contains normalized areas
-    __areas_.assign(__densities_.size(), __area_type());
+    __areas_.assign(__densities_.size(), result_type());
     _STD::partial_sum(__densities_.begin(), __densities_.end() - 1,
                                                           __areas_.begin() + 1);
     // __areas_ contains partial sums of normalized areas: [0, __densities_ - 1]
@@ -6167,9 +6166,8 @@
     typedef uniform_real_distribution<result_type> _Gen;
     result_type __u = _Gen()(__g);
     ptrdiff_t __k = _STD::upper_bound(__p.__areas_.begin(), __p.__areas_.end(),
-                               static_cast<double>(__u)) - __p.__areas_.begin() - 1;
-    return static_cast<result_type>((__u - __p.__areas_[__k]) / __p.__densities_[__k]
-                                    + __p.__b_[__k]);
+                                      __u) - __p.__areas_.begin() - 1;
+    return (__u - __p.__areas_[__k]) / __p.__densities_[__k] + __p.__b_[__k];
 }
 
 template <class _CharT, class _Traits, class _RT>
@@ -6205,7 +6203,6 @@
     typedef piecewise_constant_distribution<_RT> _Eng;
     typedef typename _Eng::result_type result_type;
     typedef typename _Eng::param_type param_type;
-    typedef typename param_type::__area_type __area_type;
     __save_flags<_CharT, _Traits> _(__is);
     __is.flags(ios_base::dec | ios_base::skipws);
     size_t __n;
@@ -6214,11 +6211,11 @@
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __b[__i];
     __is >> __n;
-    vector<double> __densities(__n);
+    vector<result_type> __densities(__n);
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __densities[__i];
     __is >> __n;
-    vector<__area_type> __areas(__n);
+    vector<result_type> __areas(__n);
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __areas[__i];
     if (!__is.fail())
@@ -6241,10 +6238,9 @@
 
     class _LIBCPP_VISIBLE param_type
     {
-        typedef typename common_type<double, result_type>::type __area_type;
         vector<result_type> __b_;
-        vector<double> __densities_;
-        vector<__area_type> __areas_;
+        vector<result_type> __densities_;
+        vector<result_type> __areas_;
     public:
         typedef piecewise_linear_distribution distribution_type;
 
@@ -6262,7 +6258,7 @@
         _LIBCPP_INLINE_VISIBILITY
         vector<result_type> intervals() const {return __b_;}
         _LIBCPP_INLINE_VISIBILITY
-        vector<double> densities() const {return __densities_;}
+        vector<result_type> densities() const {return __densities_;}
 
         friend _LIBCPP_INLINE_VISIBILITY
             bool operator==(const param_type& __x, const param_type& __y)
@@ -6333,7 +6329,7 @@
     _LIBCPP_INLINE_VISIBILITY
     vector<result_type> intervals() const {return __p_.intervals();}
     _LIBCPP_INLINE_VISIBILITY
-    vector<double> densities() const {return __p_.densities();}
+    vector<result_type> densities() const {return __p_.densities();}
 
     _LIBCPP_INLINE_VISIBILITY
     param_type param() const {return __p_;}
@@ -6389,8 +6385,8 @@
 void
 piecewise_linear_distribution<_RealType>::param_type::__init()
 {
-    __areas_.assign(__densities_.size() - 1, __area_type());
-    __area_type _S = 0;
+    __areas_.assign(__densities_.size() - 1, result_type());
+    result_type _S = 0;
     for (size_t __i = 0; __i < __areas_.size(); ++__i)
     {
         __areas_[__i] = (__densities_[__i+1] + __densities_[__i]) *
@@ -6491,19 +6487,19 @@
     typedef uniform_real_distribution<result_type> _Gen;
     result_type __u = _Gen()(__g);
     ptrdiff_t __k = _STD::upper_bound(__p.__areas_.begin(), __p.__areas_.end(),
-                               static_cast<double>(__u)) - __p.__areas_.begin() - 1;
+                                      __u) - __p.__areas_.begin() - 1;
     __u -= __p.__areas_[__k];
-    const double __dk = __p.__densities_[__k];
-    const double __dk1 = __p.__densities_[__k+1];
-    const double __deltad = __dk1 - __dk;
+    const result_type __dk = __p.__densities_[__k];
+    const result_type __dk1 = __p.__densities_[__k+1];
+    const result_type __deltad = __dk1 - __dk;
     const result_type __bk = __p.__b_[__k];
     if (__deltad == 0)
-        return static_cast<result_type>(__u / __dk + __bk);
+        return __u / __dk + __bk;
     const result_type __bk1 = __p.__b_[__k+1];
     const result_type __deltab = __bk1 - __bk;
-    return static_cast<result_type>((__bk * __dk1 - __bk1 * __dk +
+    return (__bk * __dk1 - __bk1 * __dk +
         _STD::sqrt(__deltab * (__deltab * __dk * __dk + 2 * __deltad * __u))) /
-        __deltad);
+        __deltad;
 }
 
 template <class _CharT, class _Traits, class _RT>
@@ -6539,7 +6535,6 @@
     typedef piecewise_linear_distribution<_RT> _Eng;
     typedef typename _Eng::result_type result_type;
     typedef typename _Eng::param_type param_type;
-    typedef typename param_type::__area_type __area_type;
     __save_flags<_CharT, _Traits> _(__is);
     __is.flags(ios_base::dec | ios_base::skipws);
     size_t __n;
@@ -6548,11 +6543,11 @@
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __b[__i];
     __is >> __n;
-    vector<double> __densities(__n);
+    vector<result_type> __densities(__n);
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __densities[__i];
     __is >> __n;
-    vector<__area_type> __areas(__n);
+    vector<result_type> __areas(__n);
     for (size_t __i = 0; __i < __n; ++__i)
         __is >> __areas[__i];
     if (!__is.fail())





More information about the cfe-commits mailing list