C 浮点数表示法
我注意到这段代码可以编译,但我不知道为什么:C 浮点数表示法,c,gcc,floating-point,C,Gcc,Floating Point,我注意到这段代码可以编译,但我不知道为什么: 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.0
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-dM-E-
这可能是一个GCC扩展吗?是的,它是一个需要支持的GCC扩展。文本的类型为
\u Decimal64
,但在分配给double
变量时会进行转换。右侧表示64位文本
其他扩展后缀:
- 例如
,1.0i
,1.0j
,等等。这纯粹是一个GCC扩展,标准的C99方式是使用宏1.0fi
(I
,1.0*I
,等等)1.0f*I
- ,这纯粹是一个GCC扩展:
→ <代码>\uuu浮点80(80位二进制浮点)1.0w
→ <代码>浮点128(128位二进制浮点)1.0q
- ,其依据是该提案:
→ <代码>\u十进制32(32位十进制浮点)1.0df
→ <代码>\u十进制64(64位十进制浮点)1.0dd
→ <代码>\u十进制128(128位十进制浮点)1.0dl
- ,其依据是该提案:
,0.5hr
,0.5r
等。→ <代码>分形类型(具有幅值的定点类型≤ (一)0.5ulr
,5.0hk
,5.0k
等。→ <代码>累计类型(定点类型)5.0ulk
看起来它与define的名称匹配,不是吗?感谢您提供的链接,它们使您更容易理解您的答案。