This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.

1439. Return from densities() functions?

Section: 29.5.9.6.2 [rand.dist.samp.pconst] Status: C++11 Submitter: INCITS Opened: 2010-08-25 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [rand.dist.samp.pconst].

View all issues with C++11 status.

Discussion:

Addresses US-134

These two distributions have a member function called densities() which returns a vector<double>. The distribution is templated on RealType. The distribution also has another member called intervals() which returns a vector<RealType>. Why doesn't densities return vector<RealType> as well? If RealType is long double, the computed densities property isn't being computed to the precision the client desires. If RealType is float, the densities vector is taking up twice as much space as the client desires.

[ Resolution proposed by ballot comment: ]

Change the piecewise constant and linear distributions to hold / return the densities in a vector<result_type>.

If this is not done, at least correct 29.5.9.6.2 [rand.dist.samp.pconst] p. 13 which describes the return of densities as a vector<result_type>.

[ Batavia 2010: After reviewing this issue, the working group concurred with the first of the suggestions proposed by the NB comment: "Change the piecewise constant and linear distributions to hold/return the densities in a vector. " ]

[ Adopted at 2010-11 Batavia ]

Proposed resolution:

  1. Change 29.5.9.6.2 [rand.dist.samp.pconst] p. 2, class template piecewise_constant_distribution synopsis and the prototype description 29.5.9.6.2 [rand.dist.samp.pconst] before p. 13 as indicated:
    vector<doubleresult_type> densities() const;
    
  2. Change 29.5.9.6.3 [rand.dist.samp.plinear] p. 2, class template piecewise_linear_distribution synopsis and the prototype description 29.5.9.6.3 [rand.dist.samp.plinear] before p. 13 as indicated:
    vector<doubleresult_type> densities() const;