问题描述
计算机系统:程序员的观点说:
当在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 long
或float
时可能会四舍五入。
另一种查看32位double
和32位int
的方法。每个可以表示大约 2 32 个不同的值。由于float
可以用小数部分表示许多值,因此必须存在float
不能精确表示为int
的值。 Pigeonhole principle