Я хотел бы написать функцию, которая проверяет, что 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. Так как это сделать?
Если std::numeric_limits<T>::is_iec559
тогда верно T
придерживается стандарта.
Если система использует 80-битные для своих внутренних регистров, это нормально, если конечный округленный результат наиболее близок к эталонному результату, где используется бесконечное число битов. То есть, добавление или удаление одного ulp избавит вас от ссылки.
Трудно проверить это, выполнив все возможные операции со всеми представимыми числами и сравнить со ссылкой, которая использует много битов.
Вы должны быть уверены в std::numeric_limits
и библиотека, реализующая это.
Других решений пока нет …