У меня есть спецификация файла (здесь: http://www.septentrio.com/secure/asterx1v_2_1/SBF%20Reference%20Guide.pdf) поля, помеченные как 32-битные и 64-битные числа с плавающей точкой (см. стр. 8). Как я могу использовать обе ширины в моей программе? Я сейчас занимаюсь разработкой для Mac OSX, но я также буду развертывать на машине с Linux.
Больше деталей:
Я знаю, что могу сказать компилятору ширину, но как я могу различить две разные ширины с плавающей точкой? Возможно, у кого-то также есть предложение изменить способ синтаксического анализа, который заключается в том, чтобы повторно интерпретировать_cast (buffer + offset) и затем использовать значения. Эти размеры файлов огромны (4 ГБ), поэтому мне нужна производительность.
Тем не менее это может показаться очевидным:
На платформе Intel и многих других float
является 32-битным значением с плавающей точкой, и double
является 64-битным значением с плавающей точкой. Попробуйте этот подход. Скорее всего, это будет работать.
Чтобы быть абсолютно уверенным, проверяйте размер ваших типов в начале вашей программы или статически во время компиляции, если ваш компилятор позволяет это.
Еще раз, попробуйте сначала простое решение.
Плавающая и двойная арифметика реализована на Intel и работает быстро. В любом случае нативная арифметика — самая быстрая из того, что вы можете получить от процессора.
IEEE 754 (http://en.wikipedia.org/wiki/IEEE_floating_point) определяет не один формат с плавающей запятой, а несколько, например 4, 8, 16 байтов и т. д. Все они имеют различный диапазон и точность, но все они все еще являются значениями IEEE.
Других решений пока нет …