0
我将一个复杂的双精度数组从matlab传递到一个cmex文件,以便对它们执行一个顺序操作。当我将从mxArray中检索到的数字转换为double时,似乎是错误地解释了代码。在MATLAB中铸造问题C/MEX
double *Xr, *Xi;
Xr = mxGetPr(IN_0);
Xi = mxGetPi(IN_0);
for(i = 1; i < 20; i++){
printf("%d: %d+i%d\n",i,*Xr,*Xi);
Xr++;Xi++;
}
这会产生非常高的值,例如下面
15: -803610318+i-1940584014
16: 1832649449+i300289408
17: -1676226884+i1653608050
18: -88066604+i-2135293182
我发现,如果我有一个%f
,这样的printf把它读成一个浮点数更换%d
的一个,输出符合我的即在
printf("%d: %f+i%f\n",i,*Xr,*Xi);
被传递MATLAB可变息率
15: -0.000538+i0.000221
16: -0.000602+i0.000596
17: 0.000550+i-0.000179
18: -0.000371+i-0.001420
这是正确的。
但是,如果我尝试将指针的类型更改为浮点型,我会再次得到不正确的答案。
float *Xr, *Xi;
Xr = mxGetPr(IN_0);
Xi = mxGetPi(IN_0);
for(i = 1; i < 20; i++){
printf("%d: %f+i%f\n",i,*Xr,*Xi);
Xr++;Xi++;
}
息率
15: 4596027085627908600000000000000.000000+i-0.000000
16: -0.392485+i0.362957
17: -82893360.000000+i0.000000
18: 0.412054+i-0.383178
对我来说,它看起来好像数据是通过在浮点表示编码的到来,而是由编译器看作是一个双,使其被强制转换为浮动当分配给浮点类型时。除此之外,我不知道如何解决这个问题和帮助,将不胜感激。
我对C语言的理解肯定比我想象的要好得多,谢谢。 – Bwood94