IEEE-754 float,double和quad是否保证-2,-1,-0,0,1,2的精确表示?

时间:2013-11-17 10:06:22

标签: c++ c floating-point ieee-754 floating-point-precision

所有内容都在标题中:IEEE-754 floatdoublequad是否保证-2-1-0的准确表示},012

3 个答案:

答案 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;
  • 某些x86 / x64编译器实现为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

浮点数的一个奇怪之处在于它们具有单独的符号位,因此存在正零和负零之类的东西,这在二进制补码有符号整数表示中是不可能的。