我必须存储几个非常低的概率值的乘积(例如,1E-80).由于下溢,使用原始java double将导致零.我不希望该值变为零,因为稍后将有一个更大的数字(例如,1E100)将使值在双精度数可以处理的范围内.
所以,我自己创建了一个不同的类(MyDouble),用于保存基本部分和指数部分.在进行计算时,例如乘法,我乘以基本部分,并添加指数.
该程序使用原始双重类型快速.但是,当我使用自己的类(MyDouble)时,程序非常慢.我认为这是因为每次创建简单操作时我必须创建新对象,而垃圾收集器在不再需要对象时必须做很多工作.
我的问题是,你认为我能解决这个问题有更好的方法吗?如果没有,有没有办法让我可以用自己的班级(MyDouble)加速程序?
[注意:记录日志并稍后取指数并不能解决我的问题]
MyDouble类:
public class MyDouble {
public MyDouble(double base, int power){
this.base = base;
this.power = power;
}
public static MyDouble multiply(double... values) {
MyDouble returnMyDouble = new MyDouble(0);
double prodBase = 1;
int prodPower = 0;
for( double val : values) {
MyDouble ad = new MyDouble(val);
prodBase *= ad.base;
prodPower += ad.power;
}
String newBaseString = "" + prodBase;
String[] splitted = newBaseString.split("E");
double newBase = 0; int newPower = 0;
if(splitted.length == …Run Code Online (Sandbox Code Playgroud)