【问题标题】:Convert single-precision, floating-point value to Int 16 using Accelerate framework使用 Accelerate 框架将单精度浮点值转换为 Int 16
【发布时间】:2020-06-13 05:07:57
【问题描述】:

如何借助 Accelerate 框架将单精度浮点数转换为 int 16。

Int16 浮动:

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 ?

【问题讨论】:

    标签: ios swift accelerate-framework vdsp


    【解决方案1】:

    你可以使用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 舍入。您可以在 “单向量浮点到 16 位整数转换”部分中找到其他使用其他舍入规则的函数 here

    【讨论】:

      【解决方案2】:

      vDSP Swift Overlay 中还有 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]"
      
      

      【讨论】:

      • 请注意,这需要 macOS 10.15/iOS 13 或更高版本。
      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 2020-02-03
      • 1970-01-01
      • 2013-04-16
      • 2011-11-17
      • 1970-01-01
      • 2015-06-12
      • 2017-12-26
      相关资源
      最近更新 更多