我的问题是以下内容如何在范围0 -1中获得双精度的最佳精度?
我必须使用范围[0,1]中的数字执行操作。 现在假设我在以下情况:
double[] a = new double[100]();
// initialize a with random numbers
double b = 1;
for(int i=0; i<100;i++){
b *= a[i];
}
会更好做,而不是像这样:
double[] a = new double[100];
// initialize a with random numbers
double[] A = new double[100];
for(int i=1;i<N;<i++){
A[i] = log(a[i]);
}
double b =0;
for(int =0;i<100;i++){
b += A[i];
}
b = exp(b);
第二项建议是愚蠢的东西,只是为了突出问题。有一个“正确的方法”来乘以总是从0到1的值吗?由于Medo42指出,我认为double给出的精度足以以正常的方式工作,至少在我的应用程序中(即使我不确定,例如在Q-Learning中导致 - 例如 - 我们使用做一些类似于S = X1 * Alpha + X2 * Alpha^2 + X3 * Alpha^3 + x4 * Alpha^4 ...其中Alpha是0和1之间的数字)类似的东西)
但在其他一些(例如在权重衰减方法,权重会尽可能小的ANN中设置权重)或在使用梯度下降方法的通用框架中...
因此,至少只适用于个人好奇心我想知道是否有更好的方法来执行这种计算。
感谢All,我很抱歉在这个问题之前以不清楚的方式写下了,我希望现在会更清楚。
为了精度,使用'decimal'。 – 2015-02-06 14:38:52
它很难理解你实际要问什么。你可以尝试更新你的问题,并说清楚,也许增加一个例子或一些代码? – ChrFin 2015-02-06 14:41:00
我同意ChrFin。我不知道这篇文章是关于数值精度还是一种在任何范围内向外表示某个数字的方法,尽管它可以在内部归一化到0-1的范围。 – 2015-02-06 14:42:45