2016-10-22 135 views
2

如果將有符號/無符號整數隱式轉換爲浮點/雙精度,C++如何循環?C++如何將int整型爲float/double?

像:

int myInt = SomeNumberWeCantExpressWithAFloat; 
float myFloat = myInt; 

我的大學腳本說以下內容:結果值是最接近原始值,其中的關係在實現定義的方式打破了表示值。

請介紹一下如何在「最近的表示值」計算,什麼「其中的關係以實現定義的方式破」的解釋是:。

編輯:
由於我大部分時間都在使用GCC,請提供有關GCC在默認情況下使用的浮點表示的其他信息(如果有)。

+0

我沒有問如何將一個float/double轉換爲int,也不知道如何將浮動轉成圓形。請重新閱讀我的問題! –

+0

someNumber應該是一個整數,我會編輯 –

+0

這不是正確的重複。 OP不問如何實現舍入。相反,當f'是'float'時,他要求解釋'(int)f'作品。 – dasblinkenlight

回答

1

IEEE 754指定有關如何四捨五入整數5種不同的舍入模式:

一個非常普遍的模式被稱爲:舍入到最近的,領帶甚至


從GCC百科:

沒有任何明確的方案,GCC假設舍入到最近甚至和 不關心信號NaN。與C99的#pragma STDC 比較FENV ACCESS OFF。另請參閱x86和m68080上的註釋。


舍入到最近的,領帶甚至

維基百科:

四捨五入一個數y爲最接近的整數需要爲那些有些平局決勝 規則當y恰好在兩個整數中間時的情況 - 也就是說,當y的小數部分恰好爲0.5時。

在這種情況下,甚至會選擇一個。對於負數,這適用於正數。


來源:


隨意編輯。有關理性/非理性數字轉換規則的其他信息,我們感謝。

1

單精度浮點數有24位尾數。在具有32位int以上表示值的系統上需要四捨五入。

值2 +1 = 16777217是第一個不能完全用IEEE binary32格式表示的int。有兩個float表示可用 - 16777216,它低於精確值1和16777218,它高於精確值,也是1.因此,我們有一條平行線,這意味着C++可以選擇這兩個中的任何一個表示。

+0

這只是一半的真實,因爲有大量的數字> 2 我們可以代表,也許看看我的答案,我是新的,所以我盡我所能。 –

+0

@Aresloom由於你的問題是關於數字,我們不能代表,我們可以代表的數字與這個討論無關(標準說他們必須完全轉換)。你描述的舍入模式都在那裏。該標準只是說,如果有比另一個更接近的表示,那麼它必須贏。否則,需要執行轉換中使用的多種模式中的哪一種,即您的程序不能依賴於特定的模式。 – dasblinkenlight