VS Code中两段逻辑一致的C代码输出结果不一致的技术咨询
问题分析:两段C代码输出差异的原因
核心差异源于浮点数计算精度的提升与截断,具体细节如下:
代码1中,表达式
(far-32)*5/9的计算过程会触发float到double的隐式类型提升:
因为far是float类型,而32、5、9都是int类型,C语言会自动将float提升为double来执行算术运算(避免精度损失),最终得到的是一个double精度的结果。这个结果是接近37但略小于37的近似值(比如36.999999...),直接传给printf("%f")后,会按照double的精度输出这个近似值,所以显示为36.99999。代码2中,先将上述double精度的计算结果赋值给float变量
cel:
float的精度(通常是32位单精度)远低于double(64位双精度),当把double值转成float时,会对数值进行舍入处理,将接近37的近似值舍入到float能精确表示的最接近值37.0。之后printf("%f")输出的是这个已经被舍入后的float值,所以显示为37.00000。
补充说明:98.6本身无法用二进制浮点数精确表示,无论是float还是double都是近似值,这是计算结果出现微小偏差的基础原因,但直接输出double结果和经过float截断后的结果,是两段代码输出差异的直接导火索。
内容的提问来源于stack exchange,提问作者Himanshu Raj
相关产品推荐
相关产品推荐

