iosswiftnumberszeronegative-zero

How can I separate negative zero from positive zero?


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?


Solution

  • 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.