0x0.3p10
- пример шестнадцатеричного литерала с плавающей точкой, введенного в C99. p
отделяет базовое число от показателя степени.
Бит 0x0.3
называется значимой частью (целое с необязательной дробью), а показатель степени - это степень двойки, на которую он масштабируется.
Это конкретное значение рассчитывается как 0.3
в шестнадцатеричном формате или 3 * 16<sup>-1</sup>
(3/16
), умноженное на 2<sup>10</sup>
(1024
), что дает 3 * 1024 / 16
или 192
.
Следующая программа подтверждает это:
#include <stdio.h>
int main (void) {
double d = 0x0.3p10;
printf ("%.f\n", d);
return 0;
}
Раздел 6.4.4.2
из C99 содержит все детали:
Плавающая константа имеет значимую часть, за которой может следовать часть экспоненты и суффикс, определяющий ее тип. Компоненты значимой части могут включать последовательность цифр, представляющую целую часть, за которой следует точка (.), За которой следует
последовательность цифр, представляющая дробную часть.
Компоненты части экспоненты представляют собой e, E, p или P, за которыми следует показатель степени, состоящий из необязательно подписанной последовательности цифр. Должна присутствовать либо часть целого числа, либо часть дроби; для десятичных плавающих констант должны присутствовать либо точка, либо экспонента.
Значимая часть интерпретируется как (десятичное или шестнадцатеричное) рациональное число; последовательность цифр в показательной части интерпретируется как десятичное целое число. Для десятичных плавающих констант показатель степени указывает на степень 10, на которую необходимо масштабировать значимую часть. Для шестнадцатеричных плавающих констант показатель степени указывает на степень 2, на которую следует масштабировать значащую и часть.
Для десятичных плавающих констант, а также для шестнадцатеричных плавающих констант, когда FLT_RADIX не является степенью 2, результатом является либо ближайшее представимое значение, либо большее или меньшее представимое значение, непосредственно смежное с ближайшим представимым значением, выбранным в определяемый реализацией способ. Для шестнадцатеричных плавающих констант, когда FLT_RADIX является степенью 2, результат корректно округляется.