【发布时间】:2015-07-10 08:20:30
【问题描述】:
我有一个用 MATLAB 编码的算法,它包含一些值的复弧 cos(计算需要 15 的 arccos,大约是 3.4i)。我想编写在我的 Windows 7 PC 上运行的此代码的 C 或 C++ 对应部分。实际上,我想将其生成为使用 Visual Studio C++ 编译的 mex 函数。
我包含了“complex.h”并使用了 cacosf 函数(complex arccos 返回 float _Complex),但我无法将其编译为 mex 函数,因为 Visual C++ 编译器没有具有“complex.h”支持。但是,mex 文件可以将库作为输入,因此我可以使用 MATLAB 支持的另一个编译器编译我的 c 代码(例如 mingw,我使用 gnumex 实用程序将它集成到 matlab。)我下载了 Bloodshed C++在后端使用 mingw 的 IDE,我可以编译我的 c++ 代码。以下 C++ 代码表示与我的目标类似的操作:
#include <stdio.h>
#include <complex.h>
int main() {
float _Complex myComplex;
myComplex = cacosf(5);
printf("Complex number result of acos(5) is : %f + %fi \r\n",crealf(myComplex),cimagf(myComplex));
return 0;
}
输出应该是:
acos(5) 的复数结果是:0.000000 + -2.292432i
但是我得到了
acos(5) 的复数结果是:-1.#IND00, -0.000000
当我在带有 Eclipse CDT Luna 的 Ubuntu 14.04 计算机上使用 Linux GCC 编译我的 C++ 代码时,我得到了
输出应该是:
acos(5) 的复数结果为:0.000000 + -2.292432i 我哪里错了?为什么我不能在 Windows + mingw setup 中编译这段代码?
注意:当我使用 mingw 时,我可以将 cacosf(0) 计算为 1.570796 + -0.000000。
【问题讨论】:
标签: c windows gcc mingw complex-numbers