为什么从 int 到 float "may be rounded",而从 int 到 double "can be preserved"?



计算机系统:程序员的视角说:

当在int、float和double格式之间强制转换值时程序将数值和位表示更改为如下(假设数据类型int为32位(:

  • 从int到float,数字不能溢出,但可以四舍五入
  • 从int或float到double,精确的数值可以保留,因为double具有更大的范围(即可表示的值(,以及更高的精度(即数字重要位(

为什么"可以是圆形的";从int到float,但是";可以被保存";从int到double?

这两种情况应该相同吗?(我想两者都没有舍入?(

这两种情况下应该相同吗?

否。典型的float可以精确地表示所有整数值,仅高达约224,而double可以这样做,高达253

典型的int是32位的,因此在224到231范围内的一些int值在不取整的情况下不会转换为float


为了扩展这个想法,当转换为floatdouble时,大的long long值可能会舍入。


另一种看待32位int和32位float的方法。每个可以表示大约232不同的值。由于float可以用小数部分表示许多值,因此必须存在不能完全表示为floatint值。鸽子洞原理

相关内容

最新更新