[英]Converting int/long zero to double
考慮此代碼段:
int i = 0;
double d1 = (double) i;
long l = 0L;
double d2 = (double) l;
在我的機器上運行它會為兩次轉換打印0.0
。 但d1
和d2
可以是0.0
嗎?
據我了解,這是一個擴展的原始轉換 , 規范說 :
擴展的原始轉換不會丟失有關數值總體大小的信息。
以及
將int或long值擴展為float,或將long值轉換為double,可能會導致精度損失
據我了解規范,上述意味着int 0
將始終變為double 0.0
但long 0
可以轉換為其他東西(例如1E-20
或類似的東西)。 我的規范解釋是否正確?
完整的報價是:
將int或long值擴展為float,或將long值轉換為double,可能會導致精度損失 - 也就是說,結果可能會丟失該值的一些最低有效位。 在這種情況下,使用IEEE 754舍入到最接近模式,得到的浮點值將是整數值的正確舍入版本。
(強調我的)
這涵蓋了int
/ long
值無法在float
/ double
精確表示的情況(在這種情況下,選擇最接近的可表示值)。 顯然, 0
可以表示,因此人們不會期望精度損失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.