Как проверить, использует ли компилятор C++ стандарт IEEE 754 с плавающей запятой
Я хотел бы задать вопрос, следующий за этим, на который довольно хорошо отвечает проверка определения, использует ли компилятор стандарт. Однако это работает только для Си. Есть ли способ сделать то же самое в C++?
Я не хочу преобразовывать типы с плавающей запятой в текст или использовать довольно сложные функции преобразования. Мне просто нужна проверка компилятора. Если вы знаете список таких совместимых компиляторов, пожалуйста, оставьте ссылку. Я не мог найти это.
1 ответ
На самом деле у вас есть более простой способ добиться этого в C++. Из стандарта C++ 18.2.1.1
класс numeric_limits
существует внутри std
, Для доступа к указанному статическому члену вы просто делаете это:
std::numeric_limits<double>::is_iec559;
Или же:
std::numeric_limits<float>::is_iec559;
Который должен вернуться true
если используется IEEE 754, в противном случае - false.
Как альтернативный метод, вторая часть ответа Адама должна сделать это также для C++.
Хотя этот пост устарел (10 лет), вы все равно можете попробовать это. Он также работает в C:
#ifndef __STDC_IEC_559__
#error The following Programm only supports float operations using the IEEE 754 Standard
#endif