2011-02-15 36 views
2

我希望我的程序在某些浮點變量達到無窮大時拋出異常,或者是Nan NotFiniteNumberException,它看起來像解決方案,但存在問題。 ThisC#NotFiniteNumberException不起作用

try 
{ 
    Single x = 5; 
    x = x/0; 
    x = x + 1; 
} 
catch (NotFiniteNumberException ex) 
{ 
    //bla bla bla 
} 

不會拋出任何東西。

我知道IsNanIsInfinity方法,但這不是我要找的。

+0

你確定不會拋出一個DivisionByZeroException嗎? – sheikhjabootie 2011-02-15 12:34:18

+4

@Xcaliburp:在C#中將浮點數除以零是合法的,並且會導致無窮大。 – LukeH 2011-02-15 12:36:35

+0

corect你聲明..它應該是 「不會捕獲任何東西」而不是「不會拋出任何東西」 – 2011-02-15 12:37:56

回答

7

這是因爲你的部門不會拋出NotFiniteNumberException。它只會返回無窮大x

documentation of NotFiniteNumberException

NotFiniteNumberException是可用於不支持浮點運算無窮大,而不是一個號碼的概念的編程語言。

C#確實支持無限和浮點運算不是非數字,所以這個例外在這裏不適用。執行分割後,您需要手動檢查x的值。

-1

Ehhh,

x = x/0;

將導致「DivisionByZeroException」,所以你不會在這裏趕上很多。

0

NotFiniteNumberException僅作爲支持本地支持無窮大的語言。 C#永遠不會拋出這個異常。一個例子見here

0

作爲一個側面說明,如果你想獲得達到INF或NaN例外,看到我用的代碼示例在這裏回答: How do I force the C# compiler to throw an exception when any math operation produces 'NaN'?

在那裏,只有楠例外設置,但隨時看進入Visual Studio的其他標誌的float.h版本,在這裏:http://www.fortran-2000.com/ArnaudRecipes/CompilerTricks.html#x86_FP爲例如如何設置它們。

儘管如此,你不會得到一個NotFiniteNumberException異常,而是一個System.ArithmeticException(在VS 2012上測試過)。