赞
踩
最近本人在写一个智能优化算法,大家也知道智能算法一般是解决一些大规模问题的计算,但是在我们的问题中有些计算是以小数的形式进行,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运算的机器来做浮点运算。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。