gpt4 book ai didi

MATLAB C/MEX 中的转换问题

转载 作者:行者123 更新时间:2023-11-30 16:58:40 24 4
gpt4 key购买 nike

我将一个复数 double 组从 matlab 传递到 cmex 文件中,以便对它们执行顺序操作。当我将从 mxArray 检索到的数字转换为 double 时,它似乎误解了代码。

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

我注意到,如果我将 %d 替换为 %f 以便 printf 将其读取为 float ,则输出与正在传递的 matlab 变量相匹配在

   printf("%d: %f+i%f\n",i,*Xr,*Xi);

产量

15: -0.000538+i0.000221
16: -0.000602+i0.000596
17: 0.000550+i-0.000179
18: -0.000371+i-0.001420

这是正确的。

但是,如果我尝试将指针的类型更改为 float ,我会再次得到错误的答案。

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

对我来说,数据看起来好像是以浮点表示形式编码的,但编译器将其视为 double 型,导致在分配给浮点类型时将其转换为浮点型。除此之外,我不知道如何解决这个问题,并且将不胜感激。

最佳答案

%d 说明符与 int 参数(或提升为 int 的参数)以外的任何内容一起使用都是未定义的行为。

对于第三个示例,转换指针不会转换基础数据。您正在将指向 double 的指针分配给指向 float 的指针,并取消引用,这是未定义的行为。

来自 Matlab 的数据是一个 double 数组,必须以这种方式处理。如果需要,您可以一次将一个元素转换为另一种类型。

关于MATLAB C/MEX 中的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647577/

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