什么是双精度在C / C ++浮点值的符号?
0.5是代表一个双键或一个浮点值?
我敢肯定2.0F被解析为float和2.0作为双,但什么约为0.5?
http://c.comsci.us/etymology/literals.html
什么是双精度在C / C ++浮点值的符号?
0.5是代表一个双键或一个浮点值?
我敢肯定2.0F被解析为float和2.0作为双,但什么约为0.5?
http://c.comsci.us/etymology/literals.html
这是双。 使用f后缀它来获得浮动。
这里是链接到参考文件: http://en.cppreference.com/w/cpp/language/floating_literal
从技术上说,初始化浮子具有双常数可以导致不同的结果(即累积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(这将是有趣的检查行为是由标准确定)。
虽然,因为这是一个特制的数量,最多的时候,你应该不会遇到这样的差异。