簡體   English   中英

Java:Math.random()最大值(double只小於1)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM