java中什么是严格的浮点计算?请解释下,谢谢。 40

 我来答
百度网友9308069
2012-07-15 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1929万
展开全部
严格浮点计算,即java中设有strictfp关键字参与的浮点运算
strictfp: strict floating point.

通常处理器都各自实现浮点运算,各自专业浮点处理器为实现最高速,计算结果会和IEEE标准有细小差别。比如intel主流芯片的浮点运算,内部是80bit高精运算,只输出64bit的结果。IEEE只要求64bit精度的计算,你更精确反而导致结果不一样。
所以设立‘严格浮点计算strictfp’,保证在各平台间结果一致,IEEE标准优先,性能其次;
而非严格的浮点计算是“性能优先”,标准其次。
通常不是高精密计算,非严格就很好用了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泰然还素净的海鸥H
2012-07-15 · TA获得超过332个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:137万
展开全部
System.out.println(255555555f - 255555554f);
System.out.println(25555555f - 25555554f);
System.out.println(1.7 - 1.6);
可以试下上面这两个输出的结果,还有很多类似的,随便多试几个就会发现这样的问题。其实不止是JAVA很多的编程语言中都存在这样的问题。这是计算机对浮点运算的机制决定的。
这样的结果如果是在银行或者其他商业计算中出现那么结果是不能想像的。所以有严格的浮点计算。JAVA对这样的计算是封装在BigDecimal类中的。下面这个例子你可以看看:

import java.math.BigDecimal;
public class TTT {
public static void main(String[] args) {
System.out.println(255555555f - 255555554f);
System.out.println(25555555f - 25555554f);
System.out.println(1.7 - 1.6);
BigDecimal a = new BigDecimal("255555555");
BigDecimal b = new BigDecimal("255555554");
System.out.println(a.subtract(b));
a = new BigDecimal("25555555");
b = new BigDecimal("25555554");
System.out.println(a.subtract(b));
a = new BigDecimal("1.7");
b = new BigDecimal("1.6");
System.out.println(a.subtract(b));
}
}

对于上面的代码BigDecimal的对象必须由String类型的参数去构造。因为这样是预见的结果。如果直接用double去构造,可能会造成一些不可预见的结果。详细可去看BigDecimal的API。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq243346342
2012-07-15
知道答主
回答量:10
采纳率:0%
帮助的人:11.6万
展开全部
所有的小数都要保留。一般用BigDecimal比较好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式