我的問題是以下內容如何在範圍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