Ich übergebe ein Array von komplexen Doubles von Matlab in eine Cmex-Datei, um eine sequenzielle Operation auf ihnen durchzuführen. Wenn ich die aus dem mxArray abgerufene Zahl in ein Double umwandele, scheint es den Code falsch zu interpretieren.Casting-Problem in 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++;
}
Daraus ergibt sich eine sehr hohe Werte wie die, die
15: -803610318+i-1940584014
16: 1832649449+i300289408
17: -1676226884+i1653608050
18: -88066604+i-2135293182
ich, wenn ich die %d
mit einem %f
so ersetzen bemerkt folgt, dass printf es als Fließkommazahl liest, entspricht die Ausgabe meiner Variable, die in Matlab
printf("%d: %f+i%f\n",i,*Xr,*Xi);
geben wird erbringt
15: -0.000538+i0.000221
16: -0.000602+i0.000596
17: 0.000550+i-0.000179
18: -0.000371+i-0.001420
Dies ist korrekt.
Wenn ich jedoch versuche, den Typ meines Zeigers zu ändern, bekomme ich die falsche Antwort erneut.
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++;
}
Yields
15: 4596027085627908600000000000000.000000+i-0.000000
16: -0.392485+i0.362957
17: -82893360.000000+i0.000000
18: 0.412054+i-0.383178
Für mich sieht es aus, als ob die Daten, die durch in einer Gleitkommadarstellung codiert kommen, sondern wird vom Compiler als doppelt gesehen, dass es zu schweben gegossen werden wenn es einem Float-Typ zugewiesen ist. Ansonsten weiß ich nicht, wie ich dieses Problem lösen soll und Hilfe wäre willkommen.
Mein Verständnis von C ist definitiv viel wackeliger als ich dachte, danke. – Bwood94