Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Negative number modulo in swift

Tags:

ios

swift

How does modulo of negative numbers work in swift ? When i did (-1 % 3) it is giving -1 but the remainder is 2. What is the catch in it?

like image 726
Ashutosh Pandey Avatar asked Dec 16 '16 08:12

Ashutosh Pandey


Video Answer


1 Answers

The Swift remainder operator % computes the remainder of the integer division:

a % b = a - (a/b) * b

where / is the truncating integer division. In your case

(-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1

So the remainder has always the same sign as the dividend (unless the remainder is zero).

This is the same definition as required e.g. in the C99 standard, see for example Does either ANSI C or ISO C specify what -5 % 10 should be?. See also Wikipedia: Modulo operation for an overview how this is handled in different programming languages.

A "true" modulus function could be defined in Swift like this:

func mod(_ a: Int, _ n: Int) -> Int {
    precondition(n > 0, "modulus must be positive")
    let r = a % n
    return r >= 0 ? r : r + n
}

print(mod(-1, 3)) // 2
like image 192
Martin R Avatar answered Nov 09 '22 22:11

Martin R