C++中float+int与int转float后相加存在精度差异吗
问题解答
给定代码定义:
int A = 106; float B = 10.345f;
针对A + B和(float)A + B两种运算的精度对比,结论是:二者实际精度完全一致,没有高低之分。
核心原因如下:
- C/C++的二元算术运算有明确的隐式类型转换规则:当两个操作数类型不同时,编译器会自动将低优先级类型转换为高优先级类型,两边类型统一后再执行计算。
float的类型优先级高于int,因此执行A + B时,编译器本身就会先把int类型的A隐式转换为float,再和B做加法,这个流程和手动写(float)A做强制转换的执行逻辑没有任何区别。 - 结合题目给出的具体数值验证:题目中
A的取值是106,而IEEE 754单精度float有23位尾数,能无损精确表示的整数上限为2^24=16777216,106远小于这个阈值,因此不管是隐式转换还是手动强转,A转成float后都是精确的106.0f,和B=10.345f相加的计算结果完全相同,不存在精度差异。
补充说明:手动写
(float)强转只是显式告知编译器你要执行类型转换,不会改变转换的实际效果。哪怕A的取值大到超出float可无损表示的整数范围,隐式转换和手动强转产生的精度损失也是完全一致的,不会因为加了强转就得到更高精度的计算结果。
内容的提问来源于stack exchange,提问作者TIANLUN ZHU
相关产品推荐
相关产品推荐

