I want to be able to test if zero is positive or negative in swift.
let neg: CGFloat = -0
let pos: CGFloat = +0
if pos == neg {
// this gets executed, but I don't want this
}
The code above does not work like I need it to, can someone help me?
Thank you ;)
There are “negative zero” and “positive zero” floating point numbers.
You can disambiguate them by checking the .sign
property, but they
(intentionally) compare as equal:
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.
}
Note that you have to use floating point literals ("-0.0" or "+0.0") in the initialization. The integer literals ("+0", "-0") are equal and converted to positive zero.
Basically, from the ordinary arithmetic point view both neg
and pos
are identical zeros, therefore if pos == neg
is true.
However, when it comes to representing a floating-point number, CGFloat
has sign
property as FloatingPointSign
enum:
minus if the sign bit of self is set, and plus otherwise. Implements the IEEE 754 sign bit operation.
Therefore, your if-statement would be:
if neg.sign == pos.sign { } // false
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With