Реализации
C вовсе не обязаны использовать представление IEEE 754, поэтому любое решение, основанное на прямом доступе к двоичному представлению double
, в любом случае не будет действительно переносимым.
Если , вы предполагаете, что собираетесь работать только с системами, которые представляют двойные числа в формате IEEE 754, и единственное беспокойство - это порядковый номер (и вы предполагаете, что последовательность байтов с прямым порядком байтов) в отличие от последовательности байтов с прямым порядком байтов - единственные варианты!) ... тогда вы, возможно, можете проверить бесконечность во время выполнения, используя некоторое значение с известным двоичным представлением (так же, как вы можете проверить целое число, посмотрев на посмотрите, был ли 0x12345678 сохранен с 0x12 или 0x78 в качестве первого байта).
(Если вы действительно обеспокоены переносимостью, я не уверен, что есть какой-либо лучший вариант, чем использование sprintf()
и strtod()
, и я предполагаю, что вам не обязательно иметь больше точности чем абсолютный минимум, требуемый соответствующей спецификацией, например, раздел 5.2.4.2.2 спецификации C99)