Каковы функциональные возможности Pointwise Equal, Pointwise меньше и Pointwise больше в Swift? - PullRequest
1 голос
/ 04 апреля 2019

Читая книгу Apple по языку программирования Swift, я наткнулся на Pointwise равный, Pointwise меньше, чем и Pointwise больше, чем операторы.Справка: https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations

.== Pointwise equal

.!= Pointwise not equal

Я не смог найти никаких объяснений и примеров того, когда их использовать.Какова функциональность этих операторов?

1 Ответ

3 голосов
/ 04 апреля 2019

Операторы являются частью protocol SIMD, протокола, которому соответствуют «SIMD векторные типы» .

Они были введены в Swift 5 с SE-0229 .Из этого предложения:

Давайте обсудим Маски.SIMD являются Equatable, поэтому они имеют операторы == и! =, Но они также предоставляют «поточечное сравнение» .== и .!= операторы, которые сравнивают полосы двух векторов и создают маску, которая является векторомбулевых значений.Каждая полоса маски имеет значение 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...