我有一個大的數據陣列,通過採樣250千赫的電壓創建。我想打印數據以及相關時間到文件。我的第一個辦法是做這樣的(在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 = i * dt不同的t + = dt?怎麼樣與雙?
編輯:正如已經指出的,十進制不是浮點數。我應該在這裏使用小數還是雙倍?
sampleRate是什麼類型? –
sampleRate是一個整數,在本例中爲250000. –
計算最後的比率。 – leppie