为什么从int到float可以“舍入”,而从int到double可以“保留”?

问题描述

计算机系统:程序员的观点说:

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

  • 从int到float,数字不能溢出,但是可以四舍五入
  • 从int或float到double,可以保留确切的数值 ,因为double的范围都更大(即, 可代表的值),以及更高的精度(即数字 的有效位数)。

为什么从int到float可以“舍入”,而从int到double可以“保留”?

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

解决方法

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

不。典型的float可以精确地表示所有整数值,最多只能表示2 24 ,而double可以做到2 53

典型的int是32位,因此2 24 到2 31 范围内的某些int值不会转换为{{ 1}},而不四舍五入。


为扩展思路,将大float值转换为long longfloat时可能会四舍五入。


另一种查看32位double和32位int的方法。每个可以表示大约 2 32 个不同的值。由于float可以用小数部分表示许多值,因此必须存在float不能精确表示为int的值。 Pigeonhole principle

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...