所有在标题:不IEEE-754 float
, double
和quad
保证确切表示-2
, -1
, -0
, 0
, 1
, 2
?
Answer 1:
直到显著二进制位数超过尾数的范围内它保证所有整数的精确表示。
Answer 2:
IEEE 754浮点数可以用来精确地储存一定范围的整数。 例如:
-
binary32
,在C / C ++实现为float
,提供的精度24位,因此可以具有全精度16位整数,例如表示short int
; -
binary64
,在C / C ++实现为double
,提供的精度53位,并能准确地代表32位整数,例如int
; - 非标准英特尔80位精度,作为实现
long double
由一些在x86 / x64编译器,提供64显著位,可以表示64位整数,例如long int
(上LP64系统,例如UNIX)或long long int
(上LLP64系统,如Windows); -
binary128
,因为诸如编译器特定的类型实现__float128
(GCC)或_Quad
(英特尔C / C ++),提供了在尾数113个比特,因此可以精确地表示64位整数。
这一事实double
适合的扩展范围的整数,甚至超过的32位整数的范围内,在JavaScript中,这doesen't具有特殊整数数值型使用,并且代替使用双精度浮点表示整数 。
浮点数的一个特殊之处是,它们有不同的符号位,因此喜欢的东西正,负零点存在,这是不可能的补符号整数。
Answer 3:
简单的方法来得到答案任意十进制数, 绝对值转换为二进制(24位浮法,53位双,113位为四通道),然后回十进制,看看你是否得到相同的值返回。
对于整数,答案是显而易见的,你不会失去任何东西,除非值过大,以适应位的给定数。
与非整数部分合理值的换算是更有趣。 还有,当转换成二进制一些固定的宽度,并转换回小数时,你可能会得到定期的十进制扩展十进制值(或者,如果你详谈再次失去精度),你可能会失去精度。
既然你与IEEE花车涉足,首先阅读维基百科页面 ,那么当你觉得你已经准备好更多,与第一外部链接那里,继续“什么每台计算机科学家应该知道关于浮点运算” 。
文章来源: Does IEEE-754 float, double and quad guarantee exact representation of -2, -1, -0, 0, 1, 2?