mk_*_*mk_ 9 c floating-point floating-point-conversion
floatC中的类型描述提到有效位数是6.然而,
float f = 12345.6;
Run Code Online (Sandbox Code Playgroud)
然后使用printf()打印12345.6它不打印,它打印12345.599609.那么double对于浮点类型来说,"6位有效数字"(或者"a "表示"15 ")是什么意思?
您所看到的并不是有效数字的任何问题,而是计算机上的数字以二进制形式存储的事实,并且3/5(= 0.6)没有有限的二进制表示.二进制3/5看起来像0.100110011001 ...,"1001"模式永远重复.这个序列相当于0.599999 ......重复.实际上,在与精度相关的任何错误开始之前,您实际上会在小数点右侧达到三位小数.
这类似于没有有限的基数-10表示1/3; 我们有0.3333永远重复.