C ++ 11 std :: binomial_distribution不稳定

时间:2016-04-21 07:07:25

标签: c++ c++11 random

使用<select ng-model="selectedCode" > <option value="">ALL</option> <option value="A">Option A</option> <option value="B">Option B</option> <option value="C">Option C</option> </select> <select ng-model="selectedName" > <option value="">ALL</option> <option value="John">John</option> <option value="Peter">Peter</option> </select> <div ng-repeat="item in myList" ng-if="item.code==selectedCode && item.Name==selectedName" > <!--show some data--> </div> 实施的std::binomial_distribution时,我看到一些非常不愉快的行为:

clang++

结果如下:

default_random_engine rng;

vector<double> p{0.2500000000000000000000000000000000000000,
                 0.3333333333333333148296162562473909929395,
                 0.5999999999999999777955395074968691915274,
                 1.0000000000000002220446049250313080847263};

for (auto &i : p) {
  binomial_distribution<int> binom(1000, i);
  cout << binom(rng) << " ≈ " << 1000 * i << endl;
}

非常奇怪的是,如果你试着打电话给254 ≈ 250 340 ≈ 333.333 598 ≈ 600 628 ≈ 1000 # WAT? - should be around 1000 ,它会永远挂起。后一种行为后来是不可取的,但是预期 - 成功的概率不应超过binomial_distribution<int>(100, p[3])

如果您想知道,1的上述值来自于在调整p时使用conditional binomial method生成多项变量。

我的编译器在gsl_ran_multinomial

下是clang++
El Capitan 10.11.4

谢谢!

1 个答案:

答案 0 :(得分:1)

正如您已经说过的那样,p(成功的概率)必须小于或等于1.看起来正如您所做的那样传递无效值,使用Clang中的当前实现, - 使用前一个值(在您的情况下为0.5999)。

简而言之,您似乎在调用未定义的行为。什么事情都可能发生。当<RelativeLayout> <WebView> //here webview </Webview> <ImageView> //here the overlay <ImagView> </RelativeLayout> 超出范围时,Boost的实现为documented,因为抛出异常。