C ++在double和float中输出不同的输出
这个问题在这里已经有了答案:
33.3没有精确的有界二进制表示,因此将其转换为float
或double
float
舍入。
float
有一个23位的尾数,相当于精度的6.92十进制数字; 在那里你要求打印8位数字,这比可用的精度要高,因此会显示效果或四舍五入。
double
代替52位尾数,相当于15.65位小数; 8位有效数字打印保持良好,因为您仍然打印好数字,不受四舍五入的影响。
为了更容易在我们心爱的基地中消化例子10:想象你有一个精度为15位的十进制数据类型,并且你想在其中存储1/3。 你能做的最好的就是存储0.333333333333333; 他们将其复制到一个具有6位精度的数据类型中:它变为0.333333。
现在,如果打印第一个值为8位十进制数字,则得到0.33333333,而第二个值为0.33333300 - 因为您已经在转换中丢失了其他数字。
这就是发生在这里,但用二进制浮点数而不是小数点。
这是float和double的区别的一个很好的答案。
float和double有什么区别?
默认情况下,任何幻数(作为程序中的33.30)都会以双精度处理。 当你float a = 33.30;
,发生错误。