У меня есть большой массив данных, созданный путем выборки напряжения на 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 + = dt отличается от t = i * dt с десятичной дробью?Как насчет двойного?
РЕДАКТИРОВАТЬ: Как было указано, десятичная дробь не является плавающей точкой.Должен ли я использовать десятичную или двойную здесь?