Функция, которая возвращает ли тип с плавающей точкой полностью совместимый с IEEE-754?

Я хотел бы написать функцию, которая проверяет, что float, double или же long double полностью соответствуют формату IEEE-754. Я имею в виду:

я думал так std::numeric_limits<T>::is_iec559 соответствовал этому, но он возвращает true за long double на моем Linux 64-бит, где sizeof(long double) = 16 bytes но внутренне закодированы в 80-bit Формат Intel. Так как это сделать?

3

Решение

Если std::numeric_limits<T>::is_iec559 тогда верно T придерживается стандарта.

Если система использует 80-битные для своих внутренних регистров, это нормально, если конечный округленный результат наиболее близок к эталонному результату, где используется бесконечное число битов. То есть, добавление или удаление одного ulp избавит вас от ссылки.

Трудно проверить это, выполнив все возможные операции со всеми представимыми числами и сравнить со ссылкой, которая использует много битов.

Вы должны быть уверены в std::numeric_limits и библиотека, реализующая это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]