Вам непонятно, имеете ли вы в виду литерал с плавающей запятой как часть исходного кода (для синтаксического анализа компилятором двоичного представления, зависящего от архитектуры) или сканируемый библиотечными функциями, например scanf()
, atof()
, strtol()
, strtod()
и strtold()
(во время выполнения для преобразования в значение float
, double
или long double
в памяти).
В первом случае это часть ISO / IEC 9899: 1999 (ISO C99), §6.4.4.2 «Плавающие константы». Он определяет и лексикон, и то, как его следует интерпретировать.
Во втором случае поведение библиотечных функций определено в §7.20.1 «Числовые функции преобразования».
У меня нет печатной копии предыдущего стандарта (ANSI C, 1989), но я уверен, что он также очень точно определяет, как числа с плавающей запятой анализируются и преобразуются.
В случае, если вы хотите узнать, существует ли стандарт для представления этих значений в двоичном формате в памяти, ответ - нет. Язык C предназначен для того, чтобы быть близким к архитектуре и не налагать на него ограничений. Таким образом, представление в памяти всегда зависит от архитектуры. Но стандарт C определяет, как арифметика должна выполняться над значениями с плавающей запятой. Это соответствует стандарту IEC 60559. В стандарте ISO C99 он описан в Приложении F (норматив), «Арифметика с плавающей точкой в IEC 60559». Реализация может реализовывать или не реализовывать этот стандарт. Если это так, он должен определить имя препроцессора __STDC_IEC_559__
.