在阅读Apple的Swift编程语言书籍时,我遇到了Pointwise等于,Pointwise小于和Pointwise大于运算符。 参考:https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations
.== Pointwise equal
.!= Pointwise not equal
我找不到有关何时使用它们的任何解释和示例。这些运算符的功能是什么?
答案 0 :(得分:3)
运算符是protocol SIMD
所遵循的协议“SIMD vector types”的一部分。
它们是在Swift 5中以SE-0229引入的。根据该建议:
让我们讨论面具。 SIMD是等值的,因此它们具有==和!= 运算符,但它们还提供“逐点比较”
.==
和.!=
个运算符,用于比较两个向量的泳道,并产生一个 掩码,它是布尔值的向量。面罩的每个通道是true
或false
,取决于比较值的结果 在相应的车道上。一个例子:(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)