[英]Java: Math.random() Max Value (double just less than 1)
我對此有點好奇。 Math.random()給出一個[0.0,1.0]范圍內的值。 那么它可以給出的最大價值是什么呢? 換句話說,1.0的最接近的double值是小於1.0?
Java使用64位IEEE-754表示,因此小於1的最接近的數字在十六進制表示中理論上為3FEFFFFFFFFFFFFF
,對於符號為0,對於指數為-1,對於52位有效數字為1.9999999999999997。 這相當於大約0.9999999999999998
。
參考文獻: IEEE-754計算器 。
您想要的數字由Math.nextAfter(1.0, -1.0)
。
該函數的名稱有點用詞不當。 Math.nextAfter(a, 1.0)
返回至少兩倍值,該值大於a
(即,下一個值之后a
),和Math.nextAfter(a, -1.0)
返回小於最大值a
(即, a
) 之前的值。
注意:另一張海報說, 1.0-Double.MIN_NORMAL
。 那是錯的。 1.0-Double.MIN_NORMAL
正好等於1.0。
double的最小正值是Double.MIN_NORMAL
。 因此,小於1.0的最大數字是1.0-Double.MIN_NORMAL
。
Double.MIN_NORMAL
等於2 -1022 ,所以答案仍然非常接近1.0。 您必須將1.0-Double.MIN_NORMAL
的值打印到308個小數位,然后才能看到除9之外的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.