如何避免浮点小数计算误差 miyuri Java,C,计算机 2019-12-30 从小的小数加起。 比如说,有一百个双精度浮点数,大小分别为1.00,0.99,……,0.02,0.01。 如果将它们从大加到小,结果是`50.49999999999995`。 但如果将它们从小加到大,结果则是`50.50000000000003`。 之所以会导致这个原因,是因为计算机计算浮点的机制,会在将一个小数加到一个既存大数上时造成严重误差(比如`100000000.0 + 0.000000001 = 100000000.0`)。 还有一个解决方法就是使用编译器或开发包所提供的更高精度浮点数,比如C++的`long double`、Java的`java.math.BigDecimal`,以及第三方库(比如[GMP大数运算库](https://gmplib.org/ "GMP大数运算库"))。 来源:Y. Daniel Liang,*Introduction to Java Programming and Data Structures, Comprehensive Version*,第11版。 本文由 miyuri 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。
还不快抢沙发