3

我正在使用一些以前在 Linux 上使用 gcc 编译器编译的代码,当使用 MS Visual C++ 2008 编译它时,math.h 似乎没有包含所有相同的功能,特别是(反)反双曲正切atanh功能。

我尝试使用 std::atanh 包括 math.h、cmath,但在 google/MSDN 搜索中没有找到太多其他内容。是否有一个简单的头文件可用,我可以包含它?

错误 C3861:“atanh”:未找到标识符

4

2 回答 2

5

以下是各种版本的数学库中包含和未包含的内容。

Function  POSIX  old ISO  ISO C99  Microsoft(2008)  
acos      Y      Y        Y        Y     
acosh     Y      N        Y        N    
asin      Y      Y        Y        Y     
asinh     Y      N        Y        N    
atan      Y      Y        Y        Y     
atan2     Y      Y        Y        Y     
atanh     Y      N        Y        N 

您可以不使用公式实现自己的功能:

    asinh(x) = log(x + sqrt(x2 + 1))
    acosh(x) = log(x + sqrt(x2 - 1))
    atanh(x) = (log(1+x) - log(1-x))/2

例如

float atanh (float x)
{
   //implements: return (log(1+x) - log(1-x))/2
}
于 2013-03-21T03:56:23.167 回答
2

据此 atanh 是在 C++11 中引入的。由于 C++11 是在 2011 年推出的,你可能无法在 VS 2008 中使用它。

于 2013-03-21T03:58:23.560 回答