Мне нужно хранить точную аудио позицию в базе данных, а именно SQLite. Я мог бы сохранить положение кадра (выборочное смещение / каналы) как целое число, но это привело бы к дополнительному обслуживанию данных в случае определенных преобразований файлов.
Так что я думаю о сохранении позиции в виде 8-байтового действительного значения в секундах, то есть в два раза, и таким образом, как REAL в SQLite. Это делает структуру базы данных более согласованной.
Но, учитывая максимальную частоту дискретизации 192 кГц, достаточно ли двойной точности, чтобы я всегда мог восстановить точное положение кадра при умножении значения на частоту дискретизации?
Существует ли определенная максимальная позиция, выше которой может возникнуть ошибка? Что это за максимальная позиция?
PS: речь идет о SQLite REAL, но также о двойном типе C и Java, который может содержать значение позиции на разных этапах.
Обновление:
Поскольку обсуждения теперь сосредоточены на рисках, связанных с конвертацией и округлением, вот метод C, который я планирую использовать:
// Given these types:
int samplerate;
long long framepos;
double position;
// First compute the position in seconds from the framepos:
position = (double) framepos / samplerate;
// Now store the position in an SQLite REAL column, and retrieve it later
// Then compute the framepos back from position, with rounding:
framepos = position * samplerate + 0.5;
Это безопасно и симметрично?