我有一个通过以 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 有什么不同?双打呢?
编辑:正如已经指出的那样,十进制不是浮点数。我应该在这里使用十进制还是双精度?