250 kHz で電圧をサンプリングして作成した大きなデータ配列があります。関連する時間とともにデータをファイルに出力したいと思います。私の最初のアプローチは、次のようにすることです(C#で):
decimal dt = 1m / sampleRate;
decimal t = 0;
for(int i = 0; i < dataArray.Length; i++)
{
Writer.WriteLine(t + "\t" + dataArray[i]);
t += dt; //Would using t = i * dt; be any different?
}
明らかに、このアプローチの浮動小数点演算の固有の性質により、データの数秒後に重大になるエラーが蓄積し始めます。
この問題を解決するための私のアプローチは次のようになります。
decimal dt = (decimal)(1 / sampleRate);
decimal t = 0;
int seconds = 0;
for(int i = 0; i < dataArray.Length; i++)
{
if(i % sampleRate == 0)
{
t = seconds;
seconds++;
}
Writer.WriteLine(t + "\t" + dataArray[i]);
t += dt;
}
これにより、すべてが十分に同期されますが、特にエレガントには見えません. これにアプローチするより良い方法はありますか?そして最後に、一番上のアプローチでは、 t += dt を t = i * dt と小数で使用していますか? ダブルではどうですか?
編集:指摘されているように、10 進数は浮動小数点ではありません。ここで10進数または2倍を使用する必要がありますか?