2011-05-09 83 views
1

不確定如何判斷溢出是否可能。我給出了這個示例代碼:字符或浮點溢出

char x; 
float f, g; 
// some values get assigned to x and f here... 
g = f + x; 

有人可以解釋嗎?

+0

您可能(或可能不會)發現此功能:http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html – 2011-05-09 04:43:56

回答

5

A float在其最高限度(二進制指數爲127)時,沒有足夠的精度(23位)來顯示最大可能的差異(127位,7位),因此溢出是不可能的,因爲加法將不起作用(精度爲127-7 = 120)。

+0

嗯,我失去了那裏。我認爲當你說g不足以保存溢出,因爲它是'float'類型的時候,我更好地跟蹤了你?如果g是說,輸入'double',這會節省溢出權嗎? – raphnguyen 2011-05-09 04:09:08

+0

@raphnguyn基本上,float可以包含一個圍繞[1e38]的數字(http://steve.hollasch.net/cgindex/coding/ieeefloat.html)。一個字符的最大值爲127.你不能將1e38變成127.因此,它「溢出」。 – pickypg 2011-05-09 04:19:48

+0

祝賀完美100k! (是的,一個upvote是我的。) – BoltClock 2011-05-09 04:25:12