今天我学到了一些关于浮点数如何用二进制表示的知识。 好吧,我明白为什么IEE-754技术标准对于使用相对较少的位来存储大量数字是明智的。另外我明白为什么有时候将每个符号表示为四个4位(就像你可以做Cobol一样,对吗?),当你需要非常精确的数字时。
无论如何,我的问题是,“只是”将浮点数存储为两个整数是不是更方便?例如,您可以将逗号之前的数字表示为34位整数,将逗号之后的数字表示为30位整数。那么你能写出+ -8,5亿的任何数字,大约9位小数,对吗?
与双精度浮点相比,它仍然是一个相对较小的数字范围,但据我所知,它比Cobol方式更好?
谢谢。
答案 0 :(得分:0)
浮点的优点是:
相比之下,定点数的范围非常有限,仅在有限范围内精确,并且缺少无穷大和非数字的特殊值。考虑此计算来计算向量的长度:
return sqrt(vec.x * vec.x + vec.y * vec.y);
即使最终结果适合,此计算也可能上溢或下溢,因为sqrt的参数的指数大约是最终结果的两倍。这个问题通常在使用float或double时无关紧要,因为它们的范围非常大,但是使用定点格式这个问题很容易被触及。假设一个32.32的定点格式,很难计算出一个短至70,000单位的矢量长度。
更糟糕的是,没有方便的方法来表明计算已经溢出。
此外,定点数学没有硬件支持,这使得某些操作的效率降低。
也就是说,定点数学在某些特定情况下绝对有意义。它通常用于存储时间或世界坐标,其中一致的精度(而不是一致的相对精度)是一个好处。但是对于通用计算,定点数学很麻烦且容易出错。