当您使用 32 位浮点数时,计算机将结果表示2./3.
为 11,184,811 / 16,777,216,即 0.666666686534881591796875。在您使用的浮点数中,数字始终表示为某个整数乘以 2 的某个幂(可能是 2 的负幂)。由于整数大小的限制(使用 时float
,整数必须适合 24 位,不包括符号),最接近 2/3 的可表示值是 11,184,811 / 16,777,216。
'%5.6f' 显示“0.666667”的原因printf
是因为“%5.6f”只要求六位数字,所以数字在第六位四舍五入。
显示“0.66666668653488159000”的原因是您printf
的实现在 17 位数字后“放弃”,从某种意义上说,这已经足够接近了。的某些实现(可能有人认为更好)会尽可能地打印所表示的值,因为所请求的格式允许。在这种情况下,它们将显示“0.66666668653488159180”,如果您请求更多数字,它们将显示精确值“0.666666686534881591796875”。%5.20f
printf
printf
(浮点格式通常以符号、1 [包括] 和 2 [不包括] 之间的分数和指数表示,而不是符号、整数和指数。在数学上,它们与指数调整:每个可以用符号、24 位无符号整数和指数表示的数字都等于某个带符号的数字、1 到 2 之间的小数以及调整后的指数。使用整数版本往往会使证明更容易,有时有助于解释。)