亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java.lang.Double 實現中的不一致 (Oracle JDK 1.8)?

Java.lang.Double 實現中的不一致 (Oracle JDK 1.8)?

一只斗牛犬 2022-08-17 16:10:17
我查看了該類的實現。的值是 的指定值。該字段應設置為,如果 JVM 確實以這種方式實現它,則應將其計算為。java.lang.DoubleNaN0x7ff8000000000000Lpublic static final double NaN0.0d / 0.00x7ff8000000000000L為什么選擇此值 ()?該值有什么特別之處嗎(例如,它的位掩碼)?0x7ff8000000000000L為什么字段隱式設置為該值并依賴于操作的基礎實現,而靜態方法將參數的值顯式設置為?隱式設置它,因為高度依賴于JVM的實現,并且在理論上可以改變(很可能永遠不會改變)的結果,這不是更安全嗎?0.0d / 0.0public static long doubleToLongBits(double value)0x7ff8000000000000LNaN0.0d / 0.0和 也是如此。字段隱式設置為其值,但某些方法使用顯式指定的值。這背后有什么原因嗎?POSITIVE_INFINITYNEGATIVE_INFINITY感謝您每天幫助我學習任何新知識:-)。
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

該字段應設置為,如果 JVM 確實以這種方式實現它,則應將其計算為。public static final double NaN0.0d / 0.00x7ff8000000000000L

否:根據語言規范,它導致 :NaN

將零除以零得到 NaN

0x7ff8000000000000L是 一個,而不是一個,因此不能直接用作字段初始值設定項。longdouble

Double.NaN 的文檔確實聲明其值“等效于 返回的值”。但是,優先使用 它來初始化字段,因為它是編譯時常量值,而方法調用則不是。Double.longBitsToDouble(0x7ff8000000000000L)0.0d / 0.0

(無恥的插頭為我的答案,為什么它是0.0d,而不是0.0)


為什么選擇此值 ()?0x7ff8000000000000L

如 JLS 第 4.2.3 節所述

IEEE 754 允許其每種單浮點和雙浮點格式使用多個不同的 NaN 值。雖然每個硬件架構在生成新的NaN時都會為NaN返回一個特定的位模式,但程序員也可以創建具有不同位模式的NaN,以編碼,例如,回顧性診斷信息。

在大多數情況下,Java SE 平臺將給定類型的 NaN 值視為折疊為單個規范值,因此此規范通常將任意 NaN 視為規范值。

該方法必須返回一個值,因此這是他們選擇返回的值。Double.longBitsToDouble


查看完整回答
反對 回復 2022-08-17
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號