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