float f = 0.7;
if( f == 0.7 )
printf("equal");
else
printf("not equal");
Run Code Online (Sandbox Code Playgroud)
为什么输出not equal?
为什么会这样?
在C++中(或者只有我们的编译器VC8和VC10) 3.14是双字面文并且3.14f是浮点字面值.
现在我有一位同事说:
我们应该使用float-literals进行浮点计算,使用double-literals进行双重计算,因为在计算中使用常量时,这可能会影响计算的精度.
具体来说,我认为他的意思是:
double d1, d2;
float f1, f2;
... init and stuff ...
f1 = 3.1415 * f2;
f1 = 3.1415f * f2; // any difference?
d1 = 3.1415 * d2;
d1 = 3.1415f * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)
或者,由我添加,甚至:
d1 = 42 * d2;
d1 = 42.0f * d2; // any difference?
d1 = 42.0 * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)
更一般地,只有我可以看到用点2.71828183f是确保我试图不断的指定实际上将放入一个浮动(编译错误/警告其他方式).
有人可以对此有所了解吗?你指定f后缀吗?为什么?
从答案中引用我隐含的理所当然:
如果你正在使用float变量和double literal,整个操作将以double形式完成,然后转换回float.
可能有任何伤害吗?(除了非常非常理论的性能影响?) …