как определить, имеет ли long double расширенную точность или нет во время компиляции - PullRequest
6 голосов
/ 06 января 2012

В немногих системах double - это то же самое, что long double. Как я могу определить, имеет ли long double расширенную точность, чем double, во время компиляции и использовать его для условной компиляции.

Я вижу, что в libgcc есть предопределенные макросы SIZEOF_DOUBLE и SIZEOF_LONG_DOUBLE Но они не переносимы между разными цепями инструментов.

Есть ли способ C сделать это?

Ответы [ 3 ]

5 голосов
/ 06 января 2012

Вы можете сравнить DBL_MANT_DIG и LDBL_MANT_DIG с float.h.

1 голос
/ 06 января 2012

Вы можете проверить, например,

#if DBL_MANT_DIG < LDBL_MANT_DIG

или аналогичные значения, определенные в float.h

0 голосов
/ 09 января 2012

«Правильным» решением этой проблемы (которое используется во многих проектах) является создание сценария настройки.

Сценарий configure запускает различные тесты, которые включают компиляцию и запуск небольших программ для определения свойств компилятора и системы. Затем сценарий записывает свои выводы в виде файла заголовка, или файла сборки, или обоих. Конечно, вы можете делать все что угодно.

Существуют инструменты, некоторые инструменты для полуавтоматического выполнения подобных задач, но они, вероятно, излишни для вас. Если вы хотите взглянуть, имена autoconf и automake . Осторожно, их не просто изучить, но они генерируют скрипты configure и make-файлы, которые должны работать практически на любой платформе, если она имеет оболочку в стиле unix и GNU make.

...