gpt4 book ai didi

C 中的 cacosf(复反余弦)函数返回不定值

转载 作者:行者123 更新时间:2023-11-30 17:12:44 25 4
gpt4 key购买 nike

我有一个用 MATLAB 编写的算法,其中包含某个值的复数反余弦(计算需要 15 的反余弦,大约为 3.4i)。我想编写此代码的 C 或 C++ 版本,在我的 Windows 7 PC 上运行。实际上,我想将其生成为使用 Visual Studio C++ 编译的 mex 函数。

我包含了“complex.h”并使用了 cacosf 函数(复数 arccos 返回 float _Complex),但我无法将其编译为 mex 函数,因为 Visual C++ 编译器没有有“complex.h”支持。但是,mex 文件可以将库作为输入,因此我可以使用 MATLAB 支持的另一个编译器来编译我的 c 代码(例如 mingw,我使用 gnumex 实用程序将其集成到 matlab 中。)我下载了 Bloodshed C++ IDE在后端使用mingw,我可以编译我的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;
}

输出应该是:

Complex number result of acos(5) is : 0.000000 + -2.292432i

但是我得到

Complex number result of acos(5) is : -1.#IND00, -0.000000

当我使用 Eclipse CDT Luna 在 Ubuntu 14.04 计算机上使用 Linux GCC 编译 C++ 代码时,我得到

输出应该是:

Complex number result of acos(5) is : 0.000000 + -2.292432i Where can I be wrong? Why can't I compile this code in Windows + mingw setup?

注意:当我使用 mingw 时,我可以将 cacosf(0) 计算为 1.570796 + -0.000000。

最佳答案

您使用的mingwrt版本是什么?对于 mingwrt-3.21.1,以下内容对我有用(在 Linux 主机上交叉编译,并在 wine 下运行):

$ cat foo.c
#include <stdio.h>
#include <complex.h>

int main()
{
double _Complex Z = cacos(5.0);
printf( "arcos(5) = (%g, %gi)\n", __real__ Z, __imag__ Z );
return 0;
}

$ mingw32-gcc -o foo.exe foo.c

$ ./foo.exe
arcos(5) = (0, -2.29243i)

这似乎与您的预期结果一致。但是,如果您使用 任何 mingwrt 版本早于 mingwrt-3.21,(更不用说彻底损坏的 mingwrt-4 .x 更好),那么就会出现一个已知的错误,因为任意认为任何纯真实的 cacos() 参数值大于 (1.0, 0.0i)位于有效域之外(如 acos() 其实部的情况),这将产生您报告的结果。

关于C 中的 cacosf(复反余弦)函数返回不定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com