Swift中Pointwise Equal,Pointwise小于和Pointwise大的功能是什么?

时间:2019-04-04 08:55:05

标签: swift

在阅读Apple的Swift编程语言书籍时,我遇到了Pointwise等于,Pointwise小于和Pointwise大于运算符。 参考:https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations

.== Pointwise equal

.!= Pointwise not equal

我找不到有关何时使用它们的任何解释和示例。这些运算符的功能是什么?

1 个答案:

答案 0 :(得分:3)

运算符是protocol SIMD所遵循的协议“SIMD vector types”的一部分。

它们是在Swift 5中以SE-0229引入的。根据该建议:

  

让我们讨论面具。 SIMD是等值的,因此它们具有==和!=   运算符,但它们还提供“逐点比较” .==和   .!=个运算符,用于比较两个向量的泳道,并产生一个   掩码,它是布尔值的向量。面罩的每个通道是   truefalse,取决于比较值的结果   在相应的车道上。一个例子:

(swift) let x = SIMD4<Int>(1,2,3,4)
// x : SIMD4<Int> = SIMD4<Int>(1, 2, 3, 4)
(swift) let y = SIMD4<Int>(3,2,1,0)
// y : SIMD4<Int> = SIMD4<Int>(3, 2, 1, 0)
(swift) x .== y
// r0 : SIMDMask<SIMD4<Int.SIMDMaskScalar>> = SIMDMask<SIMD4<Int>>(false, true, false, false)
     

在这里,第二条车道是true,因为2 == 2,而所有其他车道   是错误的,因为这些车道中的x和y元素不是   相等。

protocol SIMD中提取:

  

具有固定数量元素的SIMD向量。

static func .== (Self, Self) -> SIMDMask<Self.MaskStorage>
// Returns a vector mask with the result of a pointwise equality comparison.

static func .> (Self, Self) -> SIMDMask<Self.MaskStorage>
// Returns a vector mask with the result of a pointwise greater than comparison.

另一个例子:

import simd

let x = SIMD3<Float>(1.0, 2.0, 3.0)
let y = SIMD3<Float>(3.0, 2.0, 1.0)

print(x .== y) // SIMDMask<SIMD3<Int32>>(false, true, false)
print(x .!= y) // SIMDMask<SIMD3<Int32>>(true, false, true)
print(x .< y)  // SIMDMask<SIMD3<Int32>>(true, false, false)