java中没有计算减法?(由将一个数组设置为另一个数组引起)
注意:这不是许多“为什么我的浮点减法给出的正是我想要的?”的重复,差异在小数点后第三位 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
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。我也认为代码还可以,但是我的调试有什么问题吗?在我执行减法和将其打印到文件之间没有任何区别。我只是运行了这个,它给出了正确的结果。。。寻找我的大函数中发生的事情之间可能的差异。我没有从片段中排除任何内容。我发现了错误。在前面的代码中,它分配了扰动=参数。我对问题进行了编辑,大意是这样的。