java中没有计算减法?(由将一个数组设置为另一个数组引起)

java中没有计算减法?(由将一个数组设置为另一个数组引起),java,Java,注意:这不是许多“为什么我的浮点减法给出的正是我想要的?”的重复,差异在小数点后第三位 java文件中包含以下内容: perturb[i] = params[i]-h; writer.write(" params "+Double.toString(params[i])+"\n"); writer.write(" h "+Double.toString(h)+"\n"); writer.write(" pert1 "+Double.toString(params[i

注意:这不是许多“为什么我的浮点减法给出的正是我想要的?”的重复,差异在小数点后第三位

java文件中包含以下内容:

perturb[i] = params[i]-h;
writer.write("    params "+Double.toString(params[i])+"\n");
writer.write("    h      "+Double.toString(h)+"\n");
writer.write("    pert1  "+Double.toString(params[i]-h)+"\n");
writer.write("    pert2  "+Double.toString(perturb[i])+"\n");
输出文件显示:

params 1.2E-7
h      1.2E-10
pert1  1.1987999999999999E-7
pert2  1.2E-7
扰动和参数都是double[],h是double

为什么pert1和pert2不一样?我似乎不能让扰动[I]成为参数[I]-h

使用解决方案编辑:

问题在于,之前有一个perfert赋值给params(这显然只是使perfert成为对params的引用)。您可以使用以下测试用例重复该行为:

public class test {

public static void main(String[] args) {
    double[] perturb;
    double[] params = {1.2E-7};
    perturb = params;
    double h=1.2E-10;
    int i=0;
    perturb[i] += h;
    perturb[i] = params[i]-h;
    System.out.println("    params "+Double.toString(params[i])+"\n");
    System.out.println("    h      "+Double.toString(h)+"\n");
    System.out.println("    pert1  "+Double.toString(params[i]-h)+"\n");
    System.out.println("    pert2  "+Double.toString(perturb[i])+"\n");

  }
}
其中:

params 1.2E-7
h      1.2E-10
pert1  1.1987999999999999E-7
pert2  1.2E-7

你确定你提供了所有的代码吗?以下是最基本的代码:

public class test {

    public static void main(String[] args) {
        double []perturb={0.},params={1.2E-7};
        double h=1.2E-10;
        int i=0;
        perturb[i] = params[i]-h;
        System.out.println("    params "+Double.toString(params[i])+"\n");
        System.out.println("    h      "+Double.toString(h)+"\n");
        System.out.println("    pert1  "+Double.toString(params[i]-h)+"\n");
        System.out.println("    pert2  "+Double.toString(perturb[i])+"\n");

    }
}
和输出:

参数1.2E-7

h 1.2E-10

pert1 1.198799999E-7

pert2 1.198799999E-7


对我来说似乎很好。

关于你调试这个错误的原因,代码很好:@Mark。我也认为代码还可以,但是我的调试有什么问题吗?在我执行减法和将其打印到文件之间没有任何区别。我只是运行了这个,它给出了正确的结果。。。寻找我的大函数中发生的事情之间可能的差异。我没有从片段中排除任何内容。我发现了错误。在前面的代码中,它分配了扰动=参数。我对问题进行了编辑,大意是这样的。