BlockOperation
未在下面的代码中将最大值分配给vDSP_maxv
。
我预计最后一行会打印output
,但每次都打印不同的内容,通常是非常大或小的数字,例如2
我已阅读this tutorial,documentation以及2.8026e-45
标题文件中的内联文档,但我不明白为何下面的代码不是&n #39; t产生预期的结果。
让vDSP_maxv
numbers
代替UnsafePointer
没有工作,也没有其他一些我尝试过的事情,所以也许我'我缺少一些基本的东西。
UnsafeMutablePointer
答案 0 :(得分:1)
您误将stride参数的使用误认为vDSP_maxv
。
您需要传递包含单个步幅的元素数,而不是字节数。
*C = -INFINITY; for (n = 0; n < N; ++n) if (*C < A[n*I]) *C = A[n*I];
在上面的伪代码中,I
代表stride参数,你看到给MemoryLayout<Float>.stride
提供4 I
会生成超过A
范围的索引(你的numbers
)。
其他一些部分已修复以符合我的偏好,但最重要的是vDSP_maxv
的第二个参数:
import Accelerate
do {
// INPUT - pointer pointing at: 0.0, 1.0, 2.0
let numbers: [Float] = [0.0, 1.0, 2.0]
// OUTPUT
var output: Float = Float.nan
// FIND MAX
vDSP_maxv(
numbers,
1, //<- when you want to use all elements in `numbers` continuously, you need to pass `1`
&output,
vDSP_Length(numbers.count)
)
print(output) //-> 2.0
}