将复数<double> *转换为double *

时间:2016-04-11 01:31:27

标签: c++ casting

我有一个由std::complex<double>* c1表示的图像,我希望将其转换为两倍大小的double*(数组大小而不是数据大小)。复杂图像来自一些先前的FFT操作。我需要做一些像素添加的图像 所以我认为使用double*表示数据会更方便。如果你想问为什么我必须这样做,因为我想使用CUDA进行添加和内核代码中的复杂添加并不真正支持原子操作(或者,有没有你知道的?:&gt;)。因此,添加double将有望产生相同的结果。

我尝试过比较std::complex<double>double的类型。例如,使用打印此link提供的变量的二进制格式的功能,我打印两个数字:

double a1 = 1.0;
complex<double> a2(1.0, 1.0);

printBits(sizeof(double), &a1);
printBits(sizeof(complex<double>), &a2);

给出了

0011111111110000000000000000000000000000000000000000000000000000
00111111111100000000000000000000000000000000000000000000000000000011111111110000000000000000000000000000000000000000000000000000.

所以第二个是第一个的两个副本,这听起来我认为双重复合只是连接两个双。

因此,对于我的图像,我使用了以下两种版本的转换(假设我的图像存储在complex<double>数组“图像”中):

// C type cast
double* C_image = (double*)image;
// Reinterpret cast
double* reinterpret_image = reinterpret_cast<double*>(c1);

两种结果似乎都是正确的。由于我在图像处理代码中进行了大量此类转换,因此我确实希望确保转换在“理论”中得到很好的支持。所以我的问题是上述转换是否有效?或者只是一种hacky,在某些情况下可能会导致一些错误?就性能(如果有的话)和稳健性而言,哪种转换更好?

0 个答案:

没有答案