我試圖更好地瞭解實數行浮點值的分佈情況。均勻分佈的浮點值的最大範圍?
我寫這個代碼計數均勻分佈表示的值的範圍(-R,R)其中R是的的功率(也與2的冪試過)號:
public class Foo {
public static void main(String[] args)
{
for(int i=0; i<24; i++)
{
int count = 0;
float R = (float) Math.pow(10, i); //(2<<i);
float Rstep = Math.ulp(R);
for(float x = -R; x <= R; x+=Rstep)
count++;
System.out.println(R+" "+count+" "+Math.ulp(R));
}
}
}
我在結果感到驚訝由方差即
1.0 16777217 1.1920929E-7
10.0 20971521 9.536743E-7
100.0 26214401 7.6293945E-6
1000.0 32768001 6.1035156E-5
10000.0 20480001 9.765625E-4
100000.0 25600001 0.0078125
1000000.0 32000001 0.0625
如我最好半相信自己均勻分佈的值的數量將是16777216(即1對於23位尾數,由於符號位而加倍)。
爲了說明這個問題 - 我試圖建立一個模型(它使用精確到幾個數量級的SI單位,例如以km到納米的距離),但必須將其映射到浮動空間(用於加載到一個GPU)。由於這是一個科學模型,我需要了解精度在哪裏丟失。計劃是將值捕捉到均勻分佈的範圍 - 所以從上面的表格捕捉到範圍(-1000,1000)會給我32768001個精確值。
對我來說,在這些範圍內會有如此多的變化以及爲什麼2個案件的權力是有限的。
有人能解釋如何思考這個問題嗎?
歡呼聲
我想你忘了零。 – alestanis 2013-03-22 21:46:36
謝謝 - 我並不是很擔心這種潛在的錯誤(儘管它會很好理解) - 更多的因素爲2的方差 – user2152466 2013-03-22 21:49:27
「均勻分佈」是什麼意思?包含零值的唯一間隔,其中'浮動'值具有一致的間距,從-2 ** - 125(約-2.35e-38)到+2 ** - 125及其所有子區間。在此間隔中,間距爲2 ** - 149(約1.40e-45)。除此之外,步長不一;可表示值的分佈不均勻。 – 2013-03-23 12:23:38