Joseph Kessler
Joseph Kessler

Reputation: 133

If statement doesn't seem to be working properly

I have two variables, a speed and a minimum. The speed gets compared to the minimum to see if the speed should continue decreasing. For some reason, even when the speed is equal to the minimum, it continues to decrease the speed.

var wallSpeed       : CGFloat!
var wallSpeedMin    : CGFloat!
var wallSpeedChange : CGFloat!

override init(){
    wallSpeed         = 0.0035
    wallSpeedMin      = 0.0034
    wallSpeedChange   = 0.0001
}

The speed minimum is close to the speed for testing purposes.

if wallSpeed > wallSpeedMin
    {
        print("Wall speed has been increased")

        wallSpeed = wallSpeed - wallSpeedChange

        print("New speed is \(wallSpeed!)")
    }else
    {
        print("Player moved up screen")

        //Move player up instead
        playerNode.position.y = playerNode.position.y + 5

        print("Players Y value is \(playerNode.position.y)")
    }

It never hits the else statement, even though the wall speed is equal to the wall speed minimum after the first decrease.

Do I have my if statement set up incorrectly? What is causing this behavior?

Upvotes: 1

Views: 62

Answers (2)

mojtaba al moussawi
mojtaba al moussawi

Reputation: 1398

You can't compare floating point numbers like this way...

Since the way of the floating point number represented we can't simply do some math on them....

when we use integers they are represented directly in binary format, and you can do any arithmetic calculation on them, while floating point numbers are 32 bits container following the IEEE 754 standard divided in three sections :

1 bit S for the sign

8 bits for the exponent

23 bits for the mantissa

For more information Comparing Floating Point Numbers and Floating Point in Swift

Upvotes: 0

Gereon
Gereon

Reputation: 17844

Floating point math does not work like you're expecting it to. Check Is floating point math broken?

Upvotes: 1

Related Questions