我有一段Javascript代码,我正在尝试将其转换为C代码。我有一个问题是将以下行转换为C:
var q = (!isNaN(dLat/dPhi)) ? dLat/dPhi : Math.cos(lat1);
你能告诉我C中的isNan相当吗? 感谢。
答案 0 :(得分:5)
C在isnan
中有一个math.h
宏(这是C99的补充)。
仅当参数为NaN值时,宏才返回非零int
。
答案 1 :(得分:2)
不要觉得愚蠢,但它是:
isnan(x)
您还可以使用fpclassify
并检查返回结果是否为FP_NAN
。
isnan
最初是在3BSD中引入的,但在C99之前没有进入跨平台规范。 fpclasify
出现在C99中。他们在math.h
。
Microsoft在_isnan
中的MSVC中提供float.h
。
答案 2 :(得分:2)
初看起来,原作者看起来只想检查dPhi
为0,所以你可能想要替换它。但是,如果您想逐字翻译代码,只需使用math.h中的isnan
宏,如下所示:
#include <math.h>
double q = (!isnan(dLat/dPhi)) ? dLat/dPhi : cos(lat1);
答案 3 :(得分:2)
假设您的C实现是现代的(即除了MSVC以外的任何内容),您应该isnan
中有math.h
个可用内容。否则,if (x!=x)
是检查NAN的一种非常好的方法,如果你不关心它修改浮点异常标志(几乎没有人使用或关心)。