如何找出某个标准C ++函数的实现细节?

时间:2015-12-27 21:54:02

标签: c++ c++11 standard-library

让我们看一下std::normal_distribution的例子。

我知道有一些算法可以从正态分布中进行采样(参考:Wikipedia)。我知道标准规范通常会将其留给实现来选择算法(参考:SO)。

但是,有时需要在引擎盖下指定使用哪种算法。如何找到有关实施的详细信息?

(我承认我对这个世界中存在的C ++标准库的不同实现知之甚少。大多数情况下,我使用的是XCode / clang,gcc和MSVC附带的那些。)

1 个答案:

答案 0 :(得分:2)

有时,实用程序的行为是由标准明确定义的,有时则不是。

  1. 查看标准;如果发现,它是严格符合和便携的。 Yoohay!
  2. 如果未指定或显式实现定义,请查看您选择的标准库实现。源代码将解释它。
    不幸的是,它是实现定义的,然后是不可移植的。如果由POSIX或类似的东西指定,再次yoohay,但仅适用于符合POSIX或“类似”的符合平台。
  3. 以下是一个例子:

    C ++ 14标准草案N4296在§26.5.8.5.1中说明:

      

    normal_distribution随机数分布产生随机数   数字x根据概率密度函数分布

         

    formula

         

    分布参数µσ也称为此分布的均值和标准差。

    我不知道PRNG,所以我无法向你解释这个公式,但我认为这是你要找的东西。

    你有一个函数(更具体地说:“概率密度函数”),用于使用正态分布计算随机数。整个算法围绕此构建,可以在相应的标准库实现中找到。