[英]Floating Point Casting in Java
整數轉換非常簡單,多余的位就消失了。
但是,重要的是要了解在進行浮點運算的幕后到底發生了什么? 我試圖閱讀有關如何計算浮點數的信息,但是我還沒有找到一個能很好解釋這一點的信息。 至少那是我的借口。 盡管尾數的計算有些困難,但是我得到了基本的想法。
至少在Java 7之前,我知道不能在按位運算中使用浮點。 這是有道理的,因為它們是如何在內部存儲的。 是否需要了解浮點如何工作或強制轉換的任何重要信息?
因此,總結一下:
了解浮點數(如整數)的內部工作原理是否重要?
將浮點數轉換為整數的內部過程是什么?
將浮點數轉換為整數的內部過程是什么?
Java調用符合IEEE-754標准的機器代碼指令。 Java並沒有做任何事情。 如果您想知道鑄造的工作方式,建議您閱讀標准。
基本上,尾數會隨着指數和所施加的符號而移動。 也就是說,浮點數是符號* 2 ^指數*尾數,它所做的只是執行此計算,然后計算掉和小數部分。
首先,您需要了解浮點數本質上是一個近似值。 您可以輸入1.23,然后輸入1.229998(或類似的值),因為精確地表示了1.23。 不管您是否要進行任何強制轉換,都需要了解這一點,以及它如何影響計算(尤其是比較)。
從強制轉換的角度來看,將float
轉換為double
float
不會造成信息丟失,因為double
float
可以包含float
可以包含的每個值。 但是,從double
精度float
轉換為float
會導致精度損失(對於很大或很小的數字,都會導致指數上溢/下溢),因為64位值中的信息僅比32位值中的信息多,因此某些數據在不斷增加。最終“落在地板上”。
同樣,從int
轉換為double
不會導致信息丟失,因為double
可以包含int
可以包含的每個值,然后包含一些值。 但是從int
為float
或從long
為double
或float
可能會導致精度損失(盡管永遠不會出現指數上溢/下溢)。
如果float
或double
值具有大的正指數或任何負的指數,則從float
或double
為int
或long
會很容易導致上溢/下溢和大量數據丟失。 而且,當然,當您從浮點數轉換為固定數時,數字的小數部分會被截斷(本質上是“ floor”運算)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.