https://onlinegdb.com/2W-xXmnl6R

老师您能帮忙看看差十分差在哪里了么?

谢谢

Comments  

# legendary 2021-10-20 14:13
谢谢老师
+1 # Moderator 2021-10-19 19:42
很奇怪的现象,做了很多实验。

测试数据为:
-459.67 F转为-273.15 C

当a是float时,如果a = -459.67,则
表达式 (a-32.0)/1.8) 的值理论上是 -273.15 ,但是采用float计算时,由于精度误差,表达式值为:
-273.15000745985241792368469759821891784667968750000000
此时,(a-32.0)/1.8 < -273.15 为真,从而被判为 invalid。导致答案错误。

如果把表达式的值保存到float变量c中,此时c的值为:
-273.14999389648437500000000000000000000000000000000000
此时,c < -273.15 为假,从而可以做正常转换。

如果采用double变量,上述表达式的值,以及把该表达式赋值给double变量c后c的值均为:
-273.1499999999999772626324556767940521240234375000000000000000000000000000000000000000000000000000000000
这样,(a-32.0)/1.8 < -273.15 和 c < -273.15 均为假,从而可以做正常的转换。
# Moderator 2021-10-18 20:38
改用double就通过了

You have no rights to post comments