C++ 中 argf 和 atan2f 有什么区别?

Emm*_*ima 3 c++ fft std complex-numbers

我正在开发一个使用 FFT 数学的项目,遇到需要计算实部和虚部 FFT 分量的相位角的情况。在一些示例中,我看到人们使用 atan2f 来执行此操作,而在一些示例中,我看到人们将 argf 与复数类一起使用。

\n

除了采用两个单独的参数与单个复数参数之外,这两个函数的操作方式有什么区别吗?如果是这样,有什么区别?

\n

一直在网上搜索各种文档,似乎无法找到这个问题的清晰或简洁的答案。

\n

谢谢!

\n

这个来源特别令人困惑:

\n
\n

如果没有错误发生,则返回区间 [\xe2\x88\x92\xcf\x80; 中 z 的相位角;\xcf\x80]。\n处理错误和特殊情况,就像函数实现为 std::atan2(std::imag(z), std::real(z)) 一样。

\n
\n

目前尚不清楚它们是否在所有情况下都等效,或者仅在存在边缘情况或错误时等效。

\n

Art*_*yer 5

[complex.value.ops]p4

template<class T> T arg(const complex<T>& x);
Run Code Online (Sandbox Code Playgroud)

返回x: 、 或的相位角atan2(imag(x), real(x))

没有什么区别,std::arg(std::complex(x, y))就是std::atan2(y, x)

如果您的复数碰巧没有相位(例如NaN+1j0+0j),std::arg则将遵循这些参数的结果std::atan2