提问人:Emmett Palaima 提问时间:7/14/2023 更新时间:7/14/2023 访问量:82
C++ 中的 argf 和 atan2f 有什么区别?
What is the Difference Between argf and atan2f in C++?
问:
我正在使用 FFT 数学进行一个项目,遇到需要计算实部和虚部 FFT 分量的相位角的情况。在一些例子中,我看到人们使用 atan2f 来做到这一点,在一些例子中,我看到人们在复数类旁边使用 argf。
除了接受两个单独的参数与单个复数参数之外,这两个函数的操作方式有什么区别吗?如果是这样,有什么区别?
一直在网上搜索各种文档,似乎找不到这个问题的清晰或简洁的答案。
谢谢!
这个消息来源特别令人困惑:
如果没有发生错误,则返回区间 [−π; π] 中 z 的相位角。 错误和特殊情况的处理方式就像函数实现为 std::atan2(std::imag(z), std::real(z)) 一样。
目前尚不清楚它们是在所有情况下都是等效的,还是仅在存在边缘情况或错误时才等效。
答:
5赞
Artyer
7/14/2023
#1
template<class T> T arg(const complex<T>& x);
返回值:或 的相位角。
x
atan2(imag(x), real(x))
没有区别,是.std::arg(std::complex(x, y))
std::atan2(y, x)
如果你的复数恰好没有相位(例如,或),将遵循这些参数的结果。NaN+1j
0+0j
std::arg
std::atan2
评论
0赞
Cris Luengo
7/14/2023
“如果你的复数恰好没有相位,将遵循 的结果”否则它也会遵循 的结果。为什么会出现这种情况?std::arg
std::atan2
std::atan2
0赞
Artyer
7/14/2023
@CrisLuengo 只是在原始问题中解决引号“错误和特殊情况的处理,就好像函数被实现为 std::atan2(std::imag(z), std::real(z)).”
评论
0+0i
atan2
std::arg
atan2
arg
atan2