pca*_*cao 7

浮点计算是一个相当复杂的主题.

这与浮点数的二进制表示有关,它不能保证每个可能的数字(显然),具有精确的表示,这可能导致操作错误,是的,这些错误可以传播.

这是一个关于这个主题的链接,虽然它不是最简单的东西,如果你想了解这个主题,它可以给你一个很好的视角.

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

底线问题是,对于给定的浮点数,有理数,该数字的二进制表示可能需要比给定语言中的可用精度更高的精度.

例如,如果使用24位来存储double,但浮点值的二进制表示需要25位才能准确表示,则会出现舍入错误.

编辑:

正如PéterTörök在评论中指出的那样,大多数已知的编程语言对公共数据类型使用相同的表示,float- > 32位,double- > 64位,因此通常可以根据数据类型计算精度,无论语言如何.


dre*_*xin 6

这不仅仅是Scala中的情况,而是在任何使用IEEE标准的浮点数的语言/平台中.

ruby中的示例:

0.1.9.2p320 :001 > 0.3 * 3
 => 0.8999999999999999
Run Code Online (Sandbox Code Playgroud)

或Python:

>>> 0.3 * 3
0.8999999999999999
Run Code Online (Sandbox Code Playgroud)