Отдельный отрицательный ноль от положительного ноля в быстром - PullRequest
0 голосов
/ 25 октября 2018

Я хочу иметь возможность проверить, является ли ноль положительным или отрицательным в swift.

let neg: CGFloat = -0
let pos: CGFloat = +0

if pos == neg {
    // this gets executed, but I don't want this
}

Приведенный выше код не работает так, как мне нужно, может кто-нибудь мне помочь?

Спасибо;)

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

По сути, с обычной арифметической точки зрения neg и pos являются идентичными нулями , поэтому if pos == neg имеет значение.

Однако, когда речь идет о представленииЧисло с плавающей запятой, CGFloat имеет sign свойство как FloatingPointSign enum:

минус, если установлен бит знака self, и плюс в противном случае.Реализует IEEE 754 битовую операцию знака.

Следовательно, ваш оператор if будет:

if neg.sign == pos.sign { } // false
0 голосов
/ 25 октября 2018

Существуют «отрицательный ноль» и «положительный ноль» с плавающей запятой.Вы можете устранить неоднозначность, проверив свойство .sign, но они (намеренно) сравниваются как равные:

let neg: CGFloat = -0.0
let pos: CGFloat = +0.0

print(neg.sign) // minus
print(pos.sign) // plus
print(neg == pos) // true

if (neg == pos && neg.sign == pos.sign) {
    // This is not executed.
}

Обратите внимание, что вы должны использовать литералы с плавающей запятой ("-0.0" или "+0.0")в инициализации.Целочисленные литералы ("+0", "-0") равны и преобразуются в положительный ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...