多谢各位!!
解决方案 »
- 求个算法
- java jPanel刷新问题
- 谁知道五子棋和围棋的判赢的算法!!!!!
- java下用什么包或者开源组件可以自定义windows计数器呀
- 如何文本框中规定日期格式和下拉框问题
- applet装载图片的问题
- 抽象类是不能实例化的,为什么还可以有构造函数,这是基于什么得考虑?请帮忙
- 我是个初学者,请问怎么配置java编译环境?
- 出错:java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.rowset),如
- 新手问题:如何自定义异常,并且调用?
- 求一段简单的java代码,在线等,谢谢
- (小问题求助)如何让变量在程序结束后保留结果
这个和浮点数在计算机中的表示方法有关。
我不太记得双精度浮点数的表示的具体方法了,这里只是做一个举例说明。
假如双精度浮点数在计算机中占64位,其中32位用来保存小数信息,32位用来表示指数。那么0.3571在计算机中的表示方法就是:
10110110110101011100111110101010 × 2^-33
也就是10110110110101011100111110101010 乘以2的-33次方。
而0.3571换算成二进制的后应该是
1011011011010101110011111010101011001101100111101 × 2^-50
我们放在一起比较以下
10110110110101011100111110101010 × 2^-33
1011011011010101110011111010101011001101100111101 × 2^-50
可以看到,实际上在将0.3571转换成双精度浮点数的时候,是有精度的损失的,有误差存在的,只不过误差很小。
因此,在计算70000 × 0.3571的时候,误差就会被放大70000倍。
在将超出精度范围的尾数丢弃的时候,是直接丢弃还是四舍五入,应该和不同的JVM的实现有关。因此在不同的JVM上计算出来的结果会有差异。