ボレロ村上 - ENiyGmaA Code

中3女子です。

Boost.Random にバグレポート投げた。

Boost.Random は Boost 1.47 での更新で、C++0x の仕様に合わせたりするのため、
Boost 1.46.1 からかなりの手が入っています。

変更には、いくつかの下位互換性の問題を含む(しかし避けられない)ものもあります。


変更点の詳細は以下で見られます。

boostjp | Boost 1.47.0 リリースノート
https://sites.google.com/site/boostjp/document/version/1_47_0


さて、更新してみて早速いくつかの網羅的なテストを書いてみたのですが、
コンパイルエラーやバグがあったので、Boost Trac にチケットを投稿しました。


Ticket #5704 (new Bugs) https://svn.boost.org/trac/boost/ticket/5704

    • geometric_distribution::min() returns wrong value

geometric_distribution::min() returns always 1. (boost 1.47)
I think, this is a wrong value. Should return 0.
In fact, boost::random::geometric_distribution::operator()(Engine) is sometimes returns 0.

The boost::random::geometric_distribution class has been updated to match the C++ standard.
Boost 1.46.1 : p(i) = (1-p)p^(i-1)
Boost 1.47 : p(i) = p(1-p)^i

If the previous specification, then it should return 1.
However, the current specification, should return 0.

      • 原文

・geometric_distribution::min() が誤った値を返す

geometric_distribution::min() は常に 1 を返します。 (boost 1.47)
思うに、これは誤った値です。 0 を返すべきです。
実際、boost::random::geometric_distribution::operator()(Engine) は 0 を返す時があります。

boost::random::geometric_distribution クラスは C++ 標準に合うように更新されました。
Boost 1.46.1 : p(i) = (1-p)p^(i-1)
Boost 1.47 : p(i) = p(1-p)^i

以前の仕様の場合は、1 を返すべきです。
しかし、現在の仕様ならば、0 を返すべきです。


Ticket #5705 (new Bugs) https://svn.boost.org/trac/boost/ticket/5705

    • binomial_distribution compilation error

It is an error code:

boost::random::mt19937 eng;
boost::random::binomial_distribution<long long> dist;
dist(eng);

Output (VC9):

.\boost\random\binomial_distribution.hpp(324) : error C2668: 'abs' : ambiguous call to overloaded function

std::abs aren't overloaded for long long.

      • 原文

・binomial_distributionコンパイルエラー

これがエラーコードです:

boost::random::mt19937 eng;
boost::random::binomial_distribution<long long> dist;
dist(eng);

出力 (VC9):

.\boost\random\binomial_distribution.hpp(324) : error C2668: 'abs' : ambiguous call to overloaded function

std::abs は long long 型に対してオーバーロードされていません。


以上のような感じです。


英語力はあいかわらずなので文法が相当怪しいですが、できるだけシンプルな文章にしたので、
間違っていてもまったく内容が読めないということはない……と思います。思いたい。


以前もチケット投稿したので今回はそう悩むこともなくスイスイと、
と思っていたら案の定クリック連打でもしたのか2重投稿やらかして、消すにはどうしたらいいのかとあたふたしたり。

いやはや。


それにしても Boost はかわいいですね。
1.47 で新しく入った Boost.Geometry も触ってみたいです。
Boost.Polygon とどっちがどうなのかよく知りませんが。
とりあえず within あたりは重宝しそうな気がします。


それでは、また。