我注意到这段代码可以编译,但我不知道为什么:
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的延伸?
发布于 2012-03-20 20:03:02
对,它是一个指示64位 floating point文字的GCC extension。
其他扩展名后缀:
1.0i,1.0j,1.0fi等。这纯粹是一个GCC的扩展,标准的C99方式是使用宏I (1.0*I,1.0f*I,etc.)- `1.0w` → `__float80` (80-bit binary floating point)
- `1.0q` → `__float128` (128-bit binary floating point)基于提案的
- `1.0df` → `_Decimal32` (32-bit decimal floating point)
- `1.0dd` → `_Decimal64` (64-bit decimal floating point)
- `1.0dl` → `_Decimal128` (128-bit decimal floating point)基于提案的
- `0.5hr`, `0.5r`, `0.5ulr`, etc. → `_Fract` types (fixed point types with magnitude ≤ 1)
- `5.0hk`, `5.0k`, `5.0ulk`, etc. → `_Accum` types (fixed point types)
发布于 2012-03-20 20:02:28
是的,这是一个支持decimal float的GCC扩展。该文本的类型为_Decimal64,但在分配给double变量时会进行转换。
发布于 2012-03-20 20:04:06
也许它代表了一个密集排列的64位十进制?
This wikipedia article section看起来与定义的名称相匹配,不是吗?
https://stackoverflow.com/questions/9786338
复制相似问题