2012-02-11 6 views
1

У меня есть часть кода Javascript, и я пытаюсь преобразовать его в код C. У меня возникли проблемы с преобразованием следующей строки в C:IsNan эквивалент в C

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

Можете ли вы рассказать мне об эквиваленте isNan in C? Спасибо.

+0

Вы пытаетесь определить, не является ли оно нулевым? если это так: http://stackoverflow.com/questions/872323/method-call-if-not-null-in-c-sharp – Alex

+0

Я пытаюсь определить, если это не число (isNan) .Can пожалуйста, скажите мне, как использовать функцию isnan в C? – Azeem

ответ

2

На первый взгляд, похоже, что оригинальный автор просто хотел проверить, что dPhi равно 0, поэтому вы можете его заменить. Тем не менее, если вы хотите перевести код дословно, просто используйте isnan макрос из math.h, как это:

#include <math.h> 

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

Эта строка дает следующую ошибку: ошибка C2143: синтаксическая ошибка: отсутствует ';' before 'type' Я использую Visual C++ 6.0 – Azeem

+0

Это похоже на опечатку в одной из предыдущих строк. Попробуйте воспроизвести проблему с минимальным количеством строк (например, 10, включая основную функцию). Если это не поможет вам в этом процессе, задайте новый вопрос о stackoverflow и включите полный код. – phihag

+0

Я изменил код, как вы предложили на первый взгляд: if (dPhi == 0) \t \t q = cos (lat1R); \t else \t \t q = dLat/dPhi; спасибо. – Azeem

5

C имеет макрос isnan в math.h (это дополнение к C99).

Макрос возвращает ненулевое значение int, только если аргумент представляет собой значение NaN.

2

Не чувствую себя глупо, но это:

isnan(x) 

Вы также можете использовать fpclassify и проверить, если возвращение результат FP_NAN.

isnan был впервые представлен в 3BSD, но не входил в межплатформенную спецификацию до C99. fpclasify появился в C99. Они находятся в math.h.

Microsoft supply _isnan в MSVC, в float.h.

2

Предполагая, что ваша реализация C современный (т.е. ничего, кроме MSVC), вы должны иметь isnan доступны в math.h , В противном случае if (x!=x) - отличный способ проверить NAN, если вы не заботитесь об этом, изменяя флаги исключений с плавающей запятой (которые почти никто не использует или не заботится).