如何将负零与正零分开?
How do I seperate negative zero from positive zero?
我希望能够测试 swift 中的零是正数还是负数。
let neg: CGFloat = -0
let pos: CGFloat = +0
if pos == neg {
// this gets executed, but I don't want this
}
上面的代码不能像我需要的那样工作,有人可以帮助我吗?
谢谢 ;)
有“负零”和“正零”浮点数。
您可以通过检查 .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”)相等
并转换为正零。
基本上,从普通算术的角度来看,neg
和pos
都是同零,因此if pos == neg
为真
然而,在表示浮点数时,CGFloat
有 sign
属性 作为 FloatingPointSign
enum:
minus if the sign bit of self is set, and plus otherwise. Implements
the IEEE 754 sign bit operation.
因此,您的 if 语句将是:
if neg.sign == pos.sign { } // false
我希望能够测试 swift 中的零是正数还是负数。
let neg: CGFloat = -0
let pos: CGFloat = +0
if pos == neg {
// this gets executed, but I don't want this
}
上面的代码不能像我需要的那样工作,有人可以帮助我吗?
谢谢 ;)
有“负零”和“正零”浮点数。
您可以通过检查 .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”)相等 并转换为正零。
基本上,从普通算术的角度来看,neg
和pos
都是同零,因此if pos == neg
为真
然而,在表示浮点数时,CGFloat
有 sign
属性 作为 FloatingPointSign
enum:
minus if the sign bit of self is set, and plus otherwise. Implements the IEEE 754 sign bit operation.
因此,您的 if 语句将是:
if neg.sign == pos.sign { } // false