【问题标题】:atanh arc-hyperbolic tangent function missing in MS Visual C++MS Visual C++ 中缺少 atanh 反双曲正切函数
【发布时间】:2013-03-10 11:11:39
【问题描述】:

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

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

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

【问题讨论】:

  • atanh 直到 C++11 才包含在 C++ 标准库中,可以理解的是,MSVC 2008 不包含太多(如果有的话)C++11 功能。可以升级到 MSVC 2012 吗?因为它包含在那里。否则,请尝试Boost

标签: c++ math


【解决方案1】:

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

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
}

【讨论】:

  • 将“Microsoft”更改为“MSVC 2008”,因为当前版本支持所有这些功能。
  • 我确实按照您的建议自己制作了该功能。这又是一种奇怪的情况,图书馆只是缺少你期望在那里的东西。有谁知道为什么会这样?我的意思是,谁决定从这些库中省略一系列函数?
  • 众所周知,微软实现了自己的 C++ 库,其中包括字符串和数学函数,尤其是在 C++11 标准出现之前。如果您觉得答案有用,请投票或勾选正确。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 2021-08-21
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多