5

可能な限り移植性を高めたい C++ コードを実装しています。インストールに root アクセスが必要なライブラリへの依存を避けたいと考えています。さらに、リポジトリに大きなライブラリのコピーを保持することは避けたいと思います。また、ライブラリのユーザーレベルのインストールも行いたくありません (複数のコンピューターに手動でインストールする必要があるためです)。

normal_distributionプロジェクトで Boostの機能を使用したいと考えています。Boost をインストールする一般的な方法では、sudo apt-getまたはsudo yumタイプのコマンドが必要であることは理解していますが、このコードが実行されるシステムでルート アクセス権がありません。これを回避するには、Boost のnormal_distribution.cppnormal_distribution.hppのコピーをコード ディレクトリに配置し、これらのファイルを使用してコードをコンパイル/リンクするだけでよいのではないかと考えています。これは機能しますか?

normal_distribution読者は、TR1 または C++11 での実装だけを使用していない理由を疑問に思うかもしれません。答えは、(少なくとも私の経験では) g++ 4.1.x をまだ実行している一部の大学管理クラスターとの互換性を維持する必要があるということです<TR1/random>

4

3 に答える 3

3

BCP (Boost Copy)は、まさにあなたの状況を念頭に置いて書かれたものだと思います。

于 2012-07-22T00:59:34.983 に答える
2

これはまさにそれが達成しようとしているものなので、 rypplプロジェクトをチェックアウトする必要があります。github へのリンクをたどると、モジュール化されたブーストが見つかります。そこから、完全な ryppl インストールを試すことができます。いずれにせよ、中途半端な家があり、それはモジュール化されたブーストです。モジュール化されたブースト/cmake もあり、よりシンプルになります。これはrypplが後押ししようとしている方向であり、非常に役立つはずです. 私が見ることができる唯一の欠点は、ゼロ インストール インストーラーに Python スクリプトを使用する傾向があることです。

前述のように、BCP はこの目的のために開発されたものでもあるため、選択肢があります。ブーストは svn->git の変更を経ていることに注意してください。これは、現在のモジュール化されたブーストとのいくつかの不一致に反映されている構造に影響を与えているようです。システム。

于 2012-07-22T20:27:12.980 に答える
0

BCP を正しく機能させるのに苦労しました。この StackOverflow の投稿 で、BCP 関連の質問を文書化しました。

短期的にはnormal_distribution、コードベースに関数を追加しただけです。過去のいくつかの StackOverflow 投稿からまとめました。この実装は派手なテンプレート処理を行いませんが、それ以外の点では、normal_distribution.

#include "math.h"
double normal_distribution(double mean, double stdDev)
{
    //scale the number to appropriate distribution 
    return mean + (sampleNormal()*stdDev);
}

//get a number from normal distribution (mean=0, stdDev=1). 
double sampleNormal() {
    double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
    double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
    double r = u * u + v * v;
    if (r == 0 || r > 1) return sampleNormal(); //recursively re-generate number if doesn't meet criteria
    double c = sqrt(-2 * log(r) / r);
    return u * c;
}

関数のこの StackOverflow 投稿(ユーザー Pete855217) と、私が名前を付けた関数のこの StackOverflow 投稿sampleNormal()(user5084) に感謝します。normal_distribution()

于 2012-07-24T22:32:19.570 に答える