2012-02-11 110 views
1

我有一段Javascript代碼,我試圖將它轉換爲C代碼。我有一個問題,將下列行轉換爲C:IsNan等效於C

var q = (!isNaN(dLat/dPhi)) ? dLat/dPhi : Math.cos(lat1); 

你能告訴我等價於C中的isNan嗎? 謝謝。

+0

你想確定是否不爲null?如果是這樣檢查出來:http://stackoverflow.com/questions/872323/method-call-if-not-null-in-c-sharp – Alex 2012-02-11 12:17:59

+0

我想確定,如果它不是一個數字(isNan).Can請告訴我如何在C中使用isnan函數? – Azeem 2012-02-11 12:20:38

回答

2

第一眼看起來,它看起來像原來的作者只是想檢查dPhi是0,所以你可能想要替換它。但是,如果你想代碼逐字翻譯,只需使用isnan宏從math.h中,像這樣:

#include <math.h> 

double q = (!isnan(dLat/dPhi)) ? dLat/dPhi : cos(lat1); 
+0

此行給出以下錯誤: 錯誤C2143:語法錯誤:缺少';'在'type'之前 我正在使用Visual C++ 6.0 – Azeem 2012-02-11 12:26:13

+0

這聽起來像在前面的一行中存在拼寫錯誤。嘗試用盡可能少的幾行代碼來重現問題(比如10,包括主函數)。如果在這個過程中沒有爲您解決問題,請提出一個新的計算器問題幷包含完整的代碼。 – phihag 2012-02-11 12:30:57

+0

我改變了代碼,如您第一眼看到的: if(dPhi == 0) \t \t q = cos(lat1R); \t else \t \t q = dLat/dPhi; 謝謝。 – Azeem 2012-02-11 12:33:41

5

C在math.h中有一個isnan宏(這是一個C99加法)。

僅當參數爲NaN值時,宏纔會返回非零值int

2

不要覺得愚蠢的,但它是:

isnan(x) 

您還可以使用fpclassify,並檢查是否返回結果是FP_NAN

isnan最初是在3BSD中引入的,但是直到C99纔開始使用跨平臺規範。在C99中出現了fpclasify。他們在math.h

Microsoft在MSVC中提供_isnan,在float.h中。

2

假設你的C實現是現代(即任何東西,但MSVC)你應該有isnan提供math.h 。否則,if (x!=x)是一個非常好的方法來檢查NAN,如果你不關心它修改浮點異常標誌(幾乎沒有人使用或關心)。