2010-10-20 79 views
4

我已經使用Patrick Lundin的數學自由分析器在C#中編寫了簡單的數學函數繪圖儀。現在C#錯誤處理(NaN)

,我的代碼片段是這樣的:

for (float value = -xaxis; value < xaxis; value += konst) 
     { 
      hash.Add("x", value.ToString()); 
      double result = 0; 
      result = parser.Parse(func, hash);... 

這完全適用於實數定義的功能。但是,當我想要解析僅在R +上定義的函數時,例如ln(x),自然解析器會給出NaN。現在

,我試圖處理它直通異常處理,就像這樣:

for (float value = -xaxis; value < xaxis; value += konst) 
     { 
      hash.Add("x", value.ToString()); 
      double result = 0; 
      try{ 
      result = parser.Parse(func, hash); 
      } 
      catch { 
      count = false; //just a variable I am using to draw lines 
      continue; // I hoped to skip the "wrong" number parsed until I came to R+ numbers 
      }... 

但這doesen't工作,在調試時,完全不執行的漁獲物。

請問我在做什麼錯?謝謝。

+0

是否有'TryParse'? – 2010-10-20 19:47:54

回答

11

你說parser返回NaN。這不是一個例外,這是一個try/catch處理。所以catch塊沒有例外,因此它永遠不會運行。

相反,您應該測試result針對NaN的,像這樣:

if(double.IsNaN(result))... 
2

聽起來好像解析器只是返回NaN拋出異常。您可以使用the static IsNaN method測試NaN

result = parser.Parse(func, hash); 
if (float.IsNaN(result)) // assuming that result is a float 
{ 
    // do something 
} 
else 
{ 
    // do something else 
} 
2

您也可以嘗試打開「檢查算術溢出/下溢」。它位於您的項目屬性中的「生成 - >高級生成設置」下。

當它打開時,上溢和下溢(而不是包裝)將引發算術異常。它可能適用於ln函數,也可能不適用。試一試。