gpt4 book ai didi

c++ - 为什么 `ccos` 、 `csqrt` 、 `cpow` 不被识别?

转载 作者:行者123 更新时间:2023-11-28 00:01:24 24 4
gpt4 key购买 nike

为什么会出现这些错误? (我有一个 clang/g++ 编译器。)

error: use of undeclared identifier 'ccos'
error: use of undeclared identifier 'csqrt'; did you mean 'sqrt'?
error: use of undeclared identifier 'cpow'; did you mean 'pow'?

等等。我已将我的功能声明为:

#include <complex>

double ghmc1AccNormalised( double ph, double r, double t, double th){

complex<double> numerator;
complex<double> denominator;
double E = exp(1);


numerator=-(cpow(E,t*((-2*r + r*ccos(th) + r* // ... etc
// what follows is 24MB of a horrible polynomial from Mathematica
...
denominator = cpow(2,0.3333333333333333) //... etc

return creal(numerator/denominator);
}

我正在努力确保正确处理虚变量。我花了很长时间查看各种帖子,但遇到以下问题:

  • 值以 infnan 的形式出现,而它们不应该出现
  • 我怀疑这是因为没有正确处理复数
  • This highly rated post注意 ccoscsqrt 等应该用于复杂参数
  • 除上述之外,我还尝试了各种 namespace :
    • 使用复合体;
    • 使用 std::complex;
    • 我还尝试在每个函数前添加 std::complexcomplex::

免责声明 这是我的第一个 c/c++ 函数所以请忽略琐碎的问题,除非与问题直接相关

最佳答案

您正在使用 C 头文件 complex.h 中的函数,但您没有包含这些函数。但是 C++ header complexcos 提供重载, sin , pow*。您应该使用它们而不是它们的 C 对应物。

#include <complex>

int main()
{
std::complex<double> c{1, 2};
auto c2 = pow(c, 2);
auto cc = sqrt(c2);
}

* 请注意,它们位于 std 命名空间中,但 std::complex 也是如此,因此参数依赖查找 (ADL) 允许您调用它们没有 namespace 。

关于c++ - 为什么 `ccos` 、 `csqrt` 、 `cpow` 不被识别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com