为什么我不能在MinGW 12.2.0和C++11上使用std::atanf?

mzsu5hc0  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

从specs https://en.cppreference.com/w/cpp/numeric/math/atan来看,似乎std::atanf存在于C++11上,但在godbolt上,它说'atanf'不是'std'的成员:

#include <iostream>
#include <cmath>

int main()
{
    float sampleOverLoaded = 200.0f;
    float outputAtan = atanf(sampleOverLoaded);
    float outputAtanStd = std::atanf(sampleOverLoaded);
    std::cout << outputAtan << std::endl;    
    std::cout << outputAtanStd << std::endl;      
}

字符串
怎么了?注意我不想用atanhf。

r8uurelv

r8uurelv1#

这是一个长期存在的bug,已于2023年11月为GCC14解决。请参见**GCC Bug 79700 - std::fabsf and std::fabsl missing from <cmath>**。
std::atanf在C++11标准中,但在过去的12年左右没有人费心添加它。有些人也认为它不应该存在(更多讨论请参见链接的bug)。
暂时使用std::atan。这是一个重载函数,它接受floatdoublelong double

float       atan ( float num );
double      atan ( double num );
long double atan ( long double num ); // (until C++23)

个字符

相关问题