所有内容都在标题中:IEEE-754 float
,double
和quad
是否保证-2
,-1
,-0
的准确表示},0
,1
,2
?
答案 0 :(得分:8)
它保证所有整数的精确表示,直到有效二进制数的数量超过尾数的范围。
答案 1 :(得分:3)
获取任何十进制数的简单方法,将绝对值转换为二进制(浮点数为24位,双精度为53位,四元组为113位),然后返回到十进制数,然后查看如果你得到同样的价值。
对于整数,答案是显而易见的,你不会丢失任何东西,除非价值太大而不能适应给定的位数。
有理数值与非整数部分的转换更有趣。在转换为具有一定固定宽度的二进制文件时,您可能会失去精度,当转换回十进制时,您可能会得到一个带有周期性十进制扩展的十进制值(如果您将其舍入,则会再次失去精度)。
由于您正在尝试使用IEEE浮点数,请先阅读the wikipedia page,然后当您感觉自己准备好了更多时,请继续使用第一个外部链接"What Every Computer Scientist Should Know About Floating-Point Arithmetic"。< / p>
答案 2 :(得分:3)
IEEE 754浮点数可用于精确存储某个范围的整数。例如:
binary32
,在C / C ++中以float
实现,提供24位精度,因此可以用全精度16位整数表示,例如: short int
; binary64
,在C / C ++中以double
实现,提供53位精度,可以准确表示32位整数,例如: int
; long double
的非标准Intel 80位精度提供64位有效位,可表示64位整数,例如: long int
(在LP64系统上,例如Unix)或long long int
(在LLP64系统上,例如Windows); binary128
,作为特定于编译器的类型实现,例如__float128
(GCC)或_Quad
(英特尔C / C ++),在尾数中提供113位,因此可以准确表示64位位整数。 double
适合扩展的整数范围,甚至超过32位整数范围的事实在JavaScript中使用,它不具有特殊的整数数字类型,而是uses double precision floating-point to represent integers。
浮点数的一个奇怪之处在于它们具有单独的符号位,因此存在正零和负零之类的东西,这在二进制补码有符号整数表示中是不可能的。