“要想为某些正确选择数的精度具有重要意义的问题选择一种正确的精度,就需要有对浮点计算的深入理解。如果你并没有这种理解,那么给你一个忠告是花时间去学习,或者就选择double并期待着能得到最好的结果”
--------------------The C++ Programming Language
因为这句话,我今天好好的了解了一把浮点数的相关问题。
首先我们得了解浮点数在计算机内的表示方法。据说有这么一个感人的故事:
1985年Intel打算为其8086微处理器引进一种浮点数协处理器的时候,请加州大学伯克利分校的 William Kahan教授──最优秀的数值分析家之一来为8087 FPU设计浮点数格式; 而这个家伙又找来两个专家来协助他,于是就有了KCS组合(Kahn, Coonan, and Stone)。 他们共同完成了Intel的浮点数格式设计,而且完成地如此出色,以致于IEEE组织决定采用一个非常接近KCS的方案作为IEEE的标准浮点格式。这也就是传说中的IEEE754标准格式。目前,几乎所有计算机都支持该标准,大大改善了科学应用程序的可移植性。
按照IEEE754标准,32位和64位浮点数的标准格式为: