如果我嘗試填充浮點數大於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
試試吧,你的電腦不會爆炸;) –