gpt4 book ai didi

c - 将 float 组传递给 (void*) 函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:05 25 4
gpt4 key购买 nike

我正在使用 cblas_icamax。我想将浮点 vector z13] 传递给 cblas_icamax(见下文)。我的代码包括以下内容。

    float z[13] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f ,0.f, 0.f, 0.f, 0.f, 0.f};
//...

for (i = 0; i < 13; i++) {
printf("%.4f\n", z[i]);
}
int cardIndex = cblas_icamax(13,(float*) z,1);
NSLog(@"cardIndex: %d", cardIndex);

我也尝试了这段代码,结果相同。

int cardIndex = cblas_icamax(13,&z,1);

打印结果如下,最大绝对值为 138.1086,位置 10,但函数 cblas_icamax 返回 5。有什么问题吗?

-1.2624
74.1524
52.3533
89.9426
28.8639
-7.6203
-30.2820
48.9747
124.8693
29.4351
138.1086
36.2638
-45.0410

cblas_icamax

返回 vector 中绝对值最大的元素的索引(单精度复数)。

int cblas_icamax (
const int N,
const void *X,
const int incX
);

最佳答案

你的数组中有 13 个 floats

您向库保证您的数组中有 13 个 float complex 值(即 26 个 floats)。行为不符合预期也就不足为奇了。将一组复杂数据作为输入传递,或者改用 cblas_isamax

为了更准确地解释正在发生的事情:cblas_icamax 返回具有最大 L1 范数的复数 float 的索引。每个复数 float 都是来自输入的一对浮点值。如果我们查看您输入的 L1 规范:

index        value            L1 norm
0 -1.2624 + 74.1524i 75.4148
1 52.3533 + 89.9426i 142.2959
2 28.8639 - 7.6203i 36.4842
3 -30.2820 + 48.9747i 79.2567
4 124.8693 + 29.4351i 154.3044
5 138.1086 + 36.2638i 174.3724
6 -45.0410 + ???i ???
7 ??? + ???i ???
8 ??? + ???i ???
9 ??? + ???i ???
10 ??? + ???i ???
11 ??? + ???i ???
12 ??? + ???i ???

“???”字段表示未初始化的数据。所以 cblas_icamax 返回的结果看起来当然是合理的;在初始化的字段中,它具有最大的 L1 范数。当然,实际行为是未定义的,因为您是在告诉函数从未初始化(并且可能未映射)的内存中读取数据。

关于c - 将 float 组传递给 (void*) 函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14591864/

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