2017-06-27 18 views
0

巨大な計算の文脈では、私は計算中の計算時間の合計時間を見積もります。これを行うために、時間を開始時間と比較して時間を取得し、それを既に計算された比で割ります。しかし、私は驚いています:いいえoperator * (boost::time_duration, double)が存在します!なぜboost :: time_durationは実数による乗算を意味しないのですか?

は私が書くために期待したものの、このexempleを参照してください。

boost::posix_time::ptime t0 = boost::posix_time::microsec_clock::local_time(); 
for(unsigned long int i = 0; i < num_iterations; ++i) 
{ 
    // 
    // An iteration of my algorithm 
    // 

    boost::posix_time::ptime t = boost::posix_time::microsec_clock::local_time(); 
    boost::posix_time::time_duration d = t - t0; 
    boost::posix_time::time_duration expected_d = d * ((double)n/(double)i); 
} 

利用できる唯一のオペレータがoperator * (boost::time_duration, int)です。私の質問はなぜですか?分数で乗算を実装しないのに十分な理由はありますか? boost名前空間に自分自身を実装するのは悪い習慣ですか?

+0

浮動小数点数は損失を意味します – sehe

答えて

2

これをブーストネームスペースに実装することもできますが、それはベストプラクティスからは遠いです。

私は、浮動小数点の除算と乗算をposix_time :: time_durationに含めないことが良い理由があったと思います。これはおそらく、posix回の内部表現と関係があります。整数除算を行う通常の方法を使ってみませんか?

boost::posix_time::time_duration d = t - t0; 
boost::posix_time::time_duration expected_d = (n * d)/i; 
+0

これは本当に良いアイデアです! :-o – Caduchon

関連する問題