C / C ++双浮点值的符号(c/c++ notation of double floating

2019-07-03 16:04发布

什么是双精度在C / C ++浮点值的符号?

0.5是代表一个双键或一个浮点值?

我敢肯定2.0F被解析为float和2.0作为双,但什么约为0.5?

http://c.comsci.us/etymology/literals.html

Answer 1:

这是双。 使用f后缀它来获得浮动。

这里是链接到参考文件: http://en.cppreference.com/w/cpp/language/floating_literal



Answer 2:

从技术上说,初始化浮子具有双常数可以导致不同的结果(即累积2舍入误差)比用浮子恒定初始化。

下面是一个例子:

#include <stdio.h>
int main() {
    double d=8388609.499999999068677425384521484375;
    float f1=8388609.499999999068677425384521484375f;
    float f2=8388609.499999999068677425384521484375;
    float f3=(float) d;
    printf("f1=%f f2=%f f3=%f\n",f1,f2,f3);
}

用gcc 4.2.1 i686的,我得到

f1=8388609.000000 f2=8388610.000000 f3=8388610.000000

常数是恰好在基体2:

100000000000000000000001.011111111111111111111111111111

基座2表示需要54个比特,转换为double当双只有53.所以,它被四舍五入到最接近的双,领带到均匀,从而:

100000000000000000000001.10000000000000000000000000000

基座2表示需要25个比特的浮只有24,因此,如果这个转换到双浮子,然后另一个发生舍入到最接近的浮子,领带到均匀,从而:

100000000000000000000010.

如果直接将第一个数字为float,单圆是不同的:

100000000000000000000001.

正如我们所看到的,在初始化时F2,GCC十进制表示转换为双,然后为float(这将是有趣的检查行为是由标准确定)。

虽然,因为这是一个特制的数量,最多的时候,你应该不会遇到这样的差异。



文章来源: c/c++ notation of double floating point values