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