在阅读Apple的Swift编程语言书时,我遇到了Pointwise等于,Pointwise小于和Pointwise大于运算符。参考:https : //developer.apple.com/documentation/swift/swift_standard_library/operator_declarations
.== Pointwise equal
.!= Pointwise not equal
Run Code Online (Sandbox Code Playgroud)
我找不到有关何时使用它们的任何解释和示例。这些操作员的功能是什么?
运算符是“ SIMD矢量类型”所遵循protocol SIMD的协议的 一部分。
它们在SE-0229的 Swift 5中引入。根据该建议:
让我们讨论面具。SIMD是等值的,因此具有==和!=运算符,但它们还提供“逐点比较”
.==和.!=运算符,用于比较两个向量的泳道,并产生Mask(布尔)向量。掩码的每个泳道为true或false,取决于比较相应泳道中的值的结果。一个例子:Run Code Online (Sandbox Code Playgroud)(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的元素不相等。
固定数量的元素的SIMD向量。
Run Code Online (Sandbox Code Playgroud)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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |