MS Visual C++中缺少atanh反双曲正切函数

3

我正在处理一些之前在Linux上用gcc编译的代码,但是在使用MS Visual C++ 2008编译时,math.h似乎没有包含所有相同的功能,尤其是(反)双曲正切的atanh函数。

我已经尝试了包括math.h、cmath和使用std::atanh,但是在谷歌/MSDN搜索中没有发现更多信息。是否有一个简单的头文件可用于包含这个函数?

错误C3861:找不到标识符'atanh'


1
直到 C++11,C++ 标准库才包含了 atanh 函数。而 MSVC 2008 并没有包含太多(如果有的话)的 C++11 功能,这是可以理解的。你能升级到 MSVC 2012 吗?因为在那里已经包含了该函数。否则,可以尝试 Boost - Benjamin Lindley
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

e.g.

float atanh (float x)
{
   //implements: return (log(1+x) - log(1-x))/2
}

将“Microsoft”更改为“MSVC 2008”,因为当前版本支持所有这些功能。 - Benjamin Lindley
根据您的建议,我最终自己编写了该函数。再一次,这是那些库中缺少您期望存在的内容的奇怪情况之一。有人知道为什么会发生这种情况吗?我的意思是,是谁决定从这些库中省略函数族的呢? - MasterHD
微软以实现自己的C++库而闻名,其中包括字符串和数学函数,特别是在C++11标准出现之前。如果您发现答案有用,请投票或打勾。 - user1357851

2

根据这个,atanh是在C++11中引入的。由于C++11是在2011年引入的,因此您可能无法在VS 2008中使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接