2008年01月06日

簡単な計算問題 このエントリーを含むはてなブックマーク

 某所にて紹介されていたOKWaveにあった質問を解いてみた。

子供の宿題の答えを聞けますか?月曜日に提出のC++なんですが?

 要するにファイルに保存された電流計の時間履歴から台形則で蓄えられた電荷を計算して電圧で割ってやれば静電容量が出るよねって問題です。この質問の是非についてはここでは論じません。

 で、去年インストールしたVisual C++ 2008 Express Editionを使ってないから暇つぶしに書いてみようかなと思った。

 それで以下の様なコードを書いた。

#include <iostream>
#include <fstream>
#include <vector>

typedef std::pair<int,int> TValue;

void main(int argc, char** argv){
  for(int i=0;i<argc-1;i++){
    // ファイルの読み込み
    std::ifstream ifs(argv[i+1]);
    std::vector<TValue> values;
    TValue v;
    do{
      ifs >> v.first;
      ifs >> v.second;
      values.push_back(v);
    }while(v.second!=0);
    // 蓄えられた電荷を計算
    double Q=0.0;
    std::vector<TValue>::iterator ite=values.begin();
    for(int j=0;j<values.size()-1;j++){
      Q+=(ite[j].second+ite[j+1].second)/(ite[j+1].first-ite[j].first)/2.0;
    }
    // 推定結果の表示
    const double V=3.0;
    std::cout << "推定キャパシタ:" << Q/V << "(マイクロファラド)\n";
  }
}

 ところが実行させてみるとQの計算でなぜか不自然な丸めが起こり小数点1桁までの値になってしまう。なぜに?
posted by ゆうじ at 16:26 | 埼玉 ☀ | Comment(0) | TrackBack(0) | 日記 このエントリーを含むはてなブックマーク

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。