float和double不理解

img

img

为什么用float单精度结果出来是70.599998
换成double双精度结果就正确是70.600000了?
-

你那个float改为double了以后,printf里的%f也应改为%lf

原因在于浮点数由两部分组成:指数和尾数,这点如果知道怎样进行浮点数的二进制与十进制转换,应该是不难理解的。如果在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可预 知,并且变得不可逆。我们有理由相信,就是在这个过程中,发生了精度的丢失。而至于为什么有些浮点计算会得到准确的结果,应该也是碰巧那个计算的二进制与 十进制之间能够准确转换。而当输出单个浮点型数据的时候,可以正确输出。

这是计算机内部机制所导致的,详见:https://blog.csdn.net/lzf_hlh/article/details/115905064,里面就是对这个的解析