小编Rex*_*Roy的帖子

Java加倍并使用非常小的值

我必须存储几个非常低的概率值的乘积(例如,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)

java double probability

10
推荐指数
2
解决办法
5141
查看次数

标签 统计

double ×1

java ×1

probability ×1