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