如何在C++中将复杂<float>变量转换为浮点数?

How to convert a complex<float> variable into a float in C++?

本文关键字:float gt 变量 转换 浮点数 lt C++ 复杂      更新时间:2023-10-16

我有一个变量在我的代码是一个复杂的浮点数。我知道它只有一个实部,我只是想把它类型转换为一个浮点变量。

我觉得这应该是超级简单的,但你不能只是键入cast,在搜索了一个多小时后找不到答案。任何帮助将非常感激!

确实没有一种"默认"的方式从complex<float>转换为float,因为有许多解释:

  1. 要复数的大小吗?( sqrt(re*re + im*im))
  2. 你想要大小的平方吗?这避免了昂贵的平方根。
  3. 您只想要真实的部分吗?

一些做了很多数字信号处理的框架(如X-Midas, Midas 2K, PicklingTools)明确不允许这样的转换。它们让用户选择适当的转换,这样用户就不会在转换中丢失信息。话虽如此,如果你只想要真实的组件,我觉得上面的一些答案是好的。下面是一个完整的、独立的程序,它演示了:

#include <complex>
#include <iostream>
using namespace std;
int main()
{
  complex<float> cf(1.1, 2.2);
  float real_portion_only = cf.real();
  cout << real_portion_only << endl;
}

编译行和运行如下:

  % g++ comp.cc -o comp
  % ./comp
  1.1