如果我尝试填充浮点数大于float.MaxValue
的数字,会发生什么情况?C中的浮点溢出#
我有这个在我的代码:
int a;
float x;
float y;
...
float b = (a * x)/y;
我对这个两个问题:
- 存储在临时比浮动较大(A * X)的结果?这是只有当结果通过
float.MaxValue
? - 当总和的结果填入
a
时,我会得到异常吗?如果不是,我应该如何处理这个以防止灾难?
如果我尝试填充浮点数大于float.MaxValue
的数字,会发生什么情况?C中的浮点溢出#
我有这个在我的代码:
int a;
float x;
float y;
...
float b = (a * x)/y;
我对这个两个问题:
float.MaxValue
?a
时,我会得到异常吗?如果不是,我应该如何处理这个以防止灾难?你会得到float.PositiveInfinity
(或float.NegativeInfinity
)...或者你只是停留在float.MaxValue
(float.MaxValue + 1 == float.MaxValue
)...浮点数有一个“决议”,即越低越浮动点。 ..最后两个浮动点之间的距离大约是...
3,40282347E + 38:float.MaxValue
3,40282326E + 38:以前的浮动
2,028241E + 31:差异< --------- 2 * 2^31!
通过
float nearMaxValue = BitConverter.ToSingle(BitConverter.GetBytes(BitConverter.ToInt32(BitConverter.GetBytes(float.MaxValue), 0) - 1), 0);
Console.WriteLine("{0:R}: float.MaxValue", float.MaxValue);
Console.WriteLine("{0:R}: previous float", nearMaxValue);
Console.WriteLine("{0:R}: difference", float.MaxValue - nearMaxValue);
计算如果你试图把一个float比float.MaxValue一些更大的内部,这将是“无限”
至于如果你运行该代码段会发生什么(清理错误后):
float b = (a * x)/y;
Console.WriteLine(b);
Output: +infinity
a = (int)b;
Console.WriteLine(a);
Output: -2147483648
你尝试,看看会发生什么? – DavidG
为什么你不运行它并找出答案? – tnw
试试吧,你的电脑不会爆炸;) –