相关疑难解决方法(0)

与float和float文字相比较的奇怪输出

float f = 0.7;
if( f == 0.7 )
    printf("equal");
else
    printf("not equal");
Run Code Online (Sandbox Code Playgroud)

为什么输出not equal

为什么会这样?

c c++ floating-point double-precision

34
推荐指数
3
解决办法
6725
查看次数

我们通常应该使用浮点文字来表示浮点数而不是更简单的双重文字吗?

在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.

可能有任何伤害吗?(除了非常非常理论的性能影响?) …

c++ floating-point double literals

29
推荐指数
3
解决办法
8437
查看次数

标签 统计

c++ ×2

floating-point ×2

c ×1

double ×1

double-precision ×1

literals ×1