C浮点数表示法

我注意到这段代码编译但我不明白为什么:

int main() { double z = 0.000000000000001E-383DD; } 

但我不确定数字末尾的DD意味着什么。 我看过标准,但没有提到这一点。

我从以下命令获得了这个数字:

 $ gcc -dM -E - < /dev/null #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define __DEC64_DEN__ 0.000000000000001E-383DD ... 

这可能是GCC扩展吗?

对,它是一个GCC扩展 ,表示64位十进制浮点文字。

其他扩展名后缀:

  • 复杂的文字 ,例如1.0i1.0j1.0fi等。这纯粹的GCC扩展和标准的C99方式是使用宏I1.0*I1.0f*I等)

  • 其他浮点类型 ,纯粹是GCC扩展:

    • 1.0w__float80 (80位二进制浮点)
    • 1.0q__float128 (128位二进制浮点)

  • 十进制浮点类型 ,它基于提议N1312:扩展编程语言C以支持十进制浮点运算

    • 1.0df_Decimal32 (32位十进制浮点数)
    • 1.0dd_Decimal64 (64位十进制浮点数)
    • 1.0dl_Decimal128 (128位十进制浮点数)

  • 定点类型 ,基于提议N1169:支持嵌入式处理器的扩展

    • 0.5r0.5r0.5ulr等→ _Fract类型(幅度≤1的定点类型)
    • 5.0hk5.0k5.0ulk等→ _Accum类型(定点类型)

是的,它是支持十进制浮点数的GCC扩展。 文字的类型为_Decimal64 ,但在分配给double变量时会被转换。

也许它代表一个密集的64位十进制?

这个维基百科文章部分看起来与定义的名称相匹配,不是吗?