2013-10-11 43 views
0

我在看一些舊的代碼,它試圖將long double鑄造成float。從閱讀http://www.cplusplus.com/forum/beginner/34088/它看起來像long double有16的sizeof(),其中浮體具有sizeof()的8C++ Builder的2009年浮法VS長雙

當浮子變量中投後參考,你會得到一個floating point overflow exception這是可以預料的...

在調試模式下運行時,IDE會每次向您顯示異常,除非您忽略所有類型。我不希望這樣做,因爲我希望正確解決問題。

所以這個沸騰的問題到:

有沒有辦法做這樣的演員陣容,沒有得到溢出(或替代鑄造,將得到我同樣的信息)?

電流鑄造看起來像:floatVar = (float) longDoubleVar;

+0

如何鑄造做了什麼? – Oswald

+0

'floatVar =(float)longDoubleVar;' –

回答

3

轉換long double類型的值來float類型的值是良好定義的和有意義的。如果結果太大而無法存儲在float中,則結果爲浮點異常,默認情況下不起作用;存儲的值是+inf-inf

浮點異常不是C++異常;它特定於浮點,並且在代碼運行時不會顯示,除非您已經安裝了浮點陷阱處理程序。也許你的IDE安裝一個陷阱處理程序;如果是這樣,你將不得不參考文檔來弄清楚如何禁用這個「功能」。

0

的持股量將永遠不能,除非你知道,長雙的內容可以容納浮子內而不截斷數據持有多頭雙重的內容。

一般來說,編譯器將發出可能的數據丟失的,警告的警告。 C++提供了許多形式的轉換,但不幸的是,從較大的數據類型轉換爲較小的數據類型總是會有溢出的風險。我假設你在這裏的長雙變量的內容大於float可以容納的情況。如果你是從一個較小的數據類型爲較大的去

不會發生溢出的唯一方法是。唯一的例外是,如果一個較大的內容將適用於較小的類型(在某些情況下,仍然會拋出一個警告)的邊界

+0

截斷數據不會引發浮點異常。 –