我注意到这段代码编译但我不明白为什么:
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扩展吗?
答案 0 :(得分:7)
正确GCC extension表示64位decimal floating point文字。
其他扩展名后缀:
Complex literals,例如1.0i
,1.0j
,1.0fi
等。这纯粹是GCC扩展,标准C99方式是使用宏I
(1.0*I
,{{1等等。)
Additional floating point types,纯粹是GCC扩展程序:
1.0f*I
→1.0w
(80位二进制浮点)__float80
→1.0q
(128位二进制浮点)Decimal floating point types,基于提案N1312: Extension for the programming language C to support decimal floating-point arithmetic:
__float128
→1.0df
(32位十进制浮点数)_Decimal32
→1.0dd
(64位十进制浮点)_Decimal64
→1.0dl
(128位十进制浮点数)Fixed-point types,基于提案N1169: Extensions to support embedded processors:
_Decimal128
,0.5hr
,0.5r
等。→0.5ulr
类型(幅度≤1的固定点类型)_Fract
,5.0hk
,5.0k
等。→5.0ulk
类型(定点类型)答案 1 :(得分:1)
是的,这是支持decimal float的GCC扩展。文字的类型为_Decimal64
,但在分配给double
变量时会被转换。
答案 2 :(得分:1)
也许它代表一个密集的64位十进制数?
This wikipedia article section看起来与定义的名称匹配,没有?