关于float在多位数printf时,输出结果不一致的问题

问题


类似,可以看到下面的这个问题

回答

总的来说,浮点数无法表示0.1。
这是因为,根据IEEE浮点数标准,float的尾数是23位,权分别为\(2^{-1},2^{-2},...\)。0.1 = 1/10 = 1/2 * 1/5 = 1 * %2^{-1}% * 1/5,而1/5无法直接找到对应的权,只能通过更小的权来近似。因此float数据类型中,0.1这个值不是真的0.1,所以当要求prinf的尾数较多时,就打印出了真正的值。
https://floating-point-gui.de/basic/
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

posted @ 2021-12-19 18:02  ijpq  阅读(373)  评论(0编辑  收藏  举报