使用两个整数的二进制浮点数?

时间:2013-12-17 22:06:08

标签: floating-point binary

今天我学到了一些关于浮点数如何用二进制表示的知识。 好吧,我明白为什么IEE-754技术标准对于使用相对较少的位来存储大量数字是明智的。另外我明白为什么有时候将每个符号表示为四个4位(就像你可以做Cobol一样,对吗?),当你需要非常精确的数字时。

无论如何,我的问题是,“只是”将浮点数存储为两个整数是不是更方便?例如,您可以将逗号之前的数字表示为34位整数,将逗号之后的数字表示为30位整数。那么你能写出+ -8,5亿的任何数字,大约9位小数,对吗?

与双精度浮点相比,它仍然是一个相对较小的数字范围,但据我所知,它比Cobol方式更好?

谢谢。

1 个答案:

答案 0 :(得分:0)

浮点的优点是:

  1. 他们允许大量的数字。如您所建议的,32位浮点数的范围远远大于32.32(总共64位)定点数。
  2. 它们具有一致的精度 - 在几乎所有范围内,32位浮点精度至少达到800万的一部分(当它非常接近零时会失去精度)。
  3. 它们具有无限(处理溢出)和非数字(处理未定义的计算,如零除以零)的特殊值。
  4. 相比之下,定点数的范围非常有限,仅在有限范围内精确,并且缺少无穷大和非数字的特殊值。考虑此计算来计算向量的长度:

    return sqrt(vec.x * vec.x + vec.y * vec.y);
    

    即使最终结果适合,此计算也可能上溢或下溢,因为sqrt的参数的指数大约是最终结果的两倍。这个问题通常在使用float或double时无关紧要,因为它们的范围非常大,但是使用定点格式这个问题很容易被触及。假设一个32.32的定点格式,很难计算出一个短至70,000单位的矢量长度。

    更糟糕的是,没有方便的方法来表明计算已经溢出。

    此外,定点数学没有硬件支持,这使得某些操作的效率降低。

    也就是说,定点数学在某些特定情况下绝对有意义。它通常用于存储时间或世界坐标,其中一致的精度(而不是一致的相对精度)是一个好处。但是对于通用计算,定点数学很麻烦且容易出错。