Преобразование значения с плавающей запятой одинарной точности в Int 16 с использованием инфраструктуры ускорения - PullRequest
0 голосов
/ 29 февраля 2020

Как преобразовать число с плавающей точкой одинарной точности в int 16. С помощью Accelerate Framework.

Int16 для float:

import Accelerate

let rr: [Int16] = [ 18, 21, 41, 42, 48, 50, 55, 90]

var float = [Float](repeating: 0, count: rr.count)

vDSP_vflt16(rr, 1, &float, 1, vDSP_Length(rr.count)) 

Теперь я пытаюсь вернуть его Float в Int16.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

В оверлее vDSP Swift также есть floatingPointToInteger:

let floats: [Float] = [ 18, 21, 41, 42, 48, 50, 55, 90]

let ints = vDSP.floatingPointToInteger(floats,
                                       integerType: Int16.self,
                                       rounding: .towardNearestInteger)

print(ints) // Prints "[18, 21, 41, 42, 48, 50, 55, 90]"

1 голос
/ 29 февраля 2020

Вы можете использовать vDSP_vfix16 :

var ints = [Int16](repeating: 0, count: rr.count)

vDSP_vfix16(float, 1, &ints, 1, vDSP_Length(float.count))

print(ints)

// [18, 21, 41, 42, 48, 50, 55, 90]

vDSP_vfix16 округления до 0. Вы можете найти другие функции, которые используют другие правила округления, в "Single-Vector Floating Укажите на 16-разрядное целочисленное преобразование " раздел здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...