Как узнать, какие стандартные форматы поддерживает компилятор? - PullRequest
2 голосов
/ 10 июня 2011

Я знаю, что одним форматом является «стандарт IEEE 754 с плавающей запятой»

Чтобы проверить, использует ли компилятор C ++ стандарт IEEE 754 с плавающей запятой или нет

 std::numeric_limits<float>::is_iec559;

Какие существуют другие стандартные форматытам?
Как проверить, что компилятор C ++ соответствует этому формату или нет?

РЕДАКТИРОВАТЬ: сколько существует типов форматов?кто они такие ?с точки зрения языка С ++

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Нет, numeric_limits явно разработан с учетом стандарта IEEE 754.Вы только узнаете, соответствует ли реализация IEEE 754. или нет.

Но имейте в виду, что вы должны использовать has_infinity, has_quiet_NaN и т. Д. Для проверки отдельных функций - в основном вы проверяете дляопределенные функции, не для определенных форматов с плавающей запятой.

2 голосов
/ 10 июня 2011

В общем случае не очень хорошая идея для реального использования на std::numeric_limits<double>::is_iec559, потому что с g ++ это верно, даже если ваш код скомпилирован с опцией fastmath, которая, например, не поддерживает поведение IEEE 754 NaN (этов основном просто представление, совместимое с двоичным уровнем).

Т.е. на практике is_iec559 не сообщает вам, соответствует ли реализация IEEE 754.

Итак, вы переходите к компилятору-специфичные средства.

Приветствия & hth.,

...