Подтвердить что ты не робот

Как проверить, использует ли С++-компилятор стандарт IEEE 754 с плавающей запятой

Я хотел бы задать вопрос, следующий за этим, на который довольно хорошо отвечает проверка определения, использует ли компилятор стандарт. Однако это только для C. Есть ли способ сделать то же самое в С++?

Я не хочу скрывать типы с плавающей запятой в тексте или использовать некоторые довольно сложные функции преобразования. Мне просто нужна проверка компилятора. Если вам известен список таких совместимых компиляторов, отправьте ссылку. Я не мог найти его.

4b9b3361

Ответ 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