2014-07-20 56 views
0

鑄造整數非常簡單,額外的位就會消失。Java中的浮點數鑄造

但是,理解轉換浮點數的底層是什麼很重要?我試圖閱讀關於如何計算浮點數的信息,但我還沒有找到解釋得很好的信息。至少這是我的藉口。儘管尾數的計算有點困難,但我仍能得到基本的想法。

至少到Java 7,我知道浮點數不能用於按位運算。這是有道理的,因爲它們是如何存儲在內部的。有什麼重要的知識需要知道浮點如何操作或被施放?

因此,要總結:

它是重要的,瞭解浮點整數一樣的內部工作?

將浮點數轉換爲整數的內部過程是什麼?

+0

一般來說:是的,理解浮點值如何表示是非常重要的。這是你必讀的內容:[每個計算機科學家應該知道的浮點算術](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

+0

我想你在最少知道浮點數如何在各種表示中內部表示的基礎知識。否則,只需簡單地對待它們,就可能在程序中引入錯誤。 (直接比較爲0,期望不現實的高精度等) –

+0

此博客文章展示了一種將浮點數轉換爲整數而不使用轉換構造的方法。它避免了cast構造,因爲其意圖是舍入到最近的,但是這使它接近硬件中實現的內容,或者如果沒有更好的函數可用於Java,則可以使用Java實現:http:// blog.frama-c.com/index.php?post/2013/05/03/nearbyintf2 –

回答

1

將浮點數轉換爲整數的內部過程是什麼?

Java調用符合IEEE-754標準的機器代碼指令。 Java沒有這樣做。如果你想知道如何鑄造作品,我建議你閱讀標準。

基本上,尾數是由指數和符號應用。即一個浮點數是sign * 2^exponent *尾數,它所做的全部就是執行這個計算以及下降和小數部分。

0

首先,您需要了解浮點數基本上是一個近似值。你可以輸入1.23和1.229998(或者這樣的),因爲1.23代表的確切。不管你是否會做任何演員,你都需要了解它,以及它如何影響計算(尤其是比較)。

從演員的角度看,鑄造floatdouble不會造成信息的丟失,因爲double可以包含一個float可以包含每一個值。但是從doublefloat可能會導致精度損失(對於非常大或小的數字,指數上溢/下溢),因爲64位值中的信息比32位中的更多,所以有些數據正在運行結束「在地板上」。

類似地,從一個intdouble原因沒有信息損失鑄造,由於double可以包含每一個值可以int含有,然後一些。但是從intfloat或從longdoublefloat可能導致精度損失(儘管永遠不會有指數上溢/下溢)。

floatdouble投射到intlong極易造成上溢/下溢和數據的重大損失,如果floatdouble值具有大的正指數或任何負指數。當然,當你從浮點數到固定數時,數的小數部分被截斷(本質上是一個「平面」操作)。