在c++中(float + int)和(float + (float)int)之间有任何精度差异吗?

  • 本文关键字:float int 精度 任何 c++ 之间 c++
  • 更新时间 :
  • 英文 :


例如

如果我有int A = 106float B = 10.345f,哪个操作更精确,A + B还是(float)A + B?或者它们实际上具有相同的精度吗?

不,没有区别。当添加两个算术类型时,编译器会应用一组隐式转换。例如,您可以在cppreference上找到这些规则的列表。在你的情况下,规则3)适用:

  1. 否则,如果其中一个操作数为float、float复数或float虚数,另一个操作数隐式转换如下:
    • 整型为浮点型(唯一可能的实数类型是float)仍然按原样)
    • […]

因此,如果您没有使用强制类型转换显式声明转换,编译器将隐式地为您执行完全相同的转换。而且由于表达式实际上是相同的,因此在精度上也没有差异。

如果您查看编译器的结果https://godbolt.org/z/x5174j8n9,那么您会看到函数

float add1(int A, float B)
{
return A + B;
}
float add2(int A, float B)
{
return (float)A + B;
}

在启用O2O3优化时给出相同的编译器输出:

add1(int, float):
movaps  xmm1, xmm0
pxor    xmm0, xmm0
cvtsi2ss        xmm0, edi
addss   xmm0, xmm1
ret
add2(int, float):
movaps  xmm1, xmm0
pxor    xmm0, xmm0
cvtsi2ss        xmm0, edi
addss   xmm0, xmm1
ret

最新更新