当前位置:   article > 正文

Java:关于智能计算中使用BigDecimal类造成的性能低的问题_bigdecimal性能太差

bigdecimal性能太差

最近本人在写一个智能优化算法,大家也知道智能算法一般是解决一些大规模问题的计算,但是在我们的问题中有些计算是以小数的形式进行,java中小数的运算是不精确的,因此自然而然就想到了BigDecimal类,然后把算法中有关加减乘除的运算,都换成了Arith工具类,结果一运行每次迭代龟速,实在不行,所以考虑了Math.round()方法。

Math.round( )方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

Math.round(double d)和Math.round(float f)的方法,分别返回长整型和整型值。round方法不能设置保留几位小数,我们只能象这样(保留两位):

public double round(double value){

return Math.round( value * 100 ) / 100.0;

}

但非常不幸的是,上面的代码并不能正常工作,给这个方法传入4.015它将返回4.01而不是4.02,如我们在上面看到的

4.015 * 100 = 401.49999999999994

因此如果我们要做到精确的四舍五入,这种方法不能满足我们的要求,但是如果不是特别要求精度可以采取这种方法,本人经过测试这种方法与其他四舍五入的精确方法(如String.fomat和DecimalFormat)相比,效率方面要高得多。

另外一种办法呢就是从硬件下手,找一台高性能GPU运算的机器来做浮点运算。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/319772
推荐阅读
相关标签
  

闽ICP备14008679号