Home > Backend Development > C++ > How Do We Correctly Calculate the Modulo of Negative Numbers?

How Do We Correctly Calculate the Modulo of Negative Numbers?

Mary-Kate Olsen
Release: 2025-01-13 13:31:42
Original
285 people have browsed it

How Do We Correctly Calculate the Modulo of Negative Numbers?

Modulo negative numbers: a difficult problem

For positive numbers, it is simple to calculate the remainder of dividing one integer by another. However, the standard modulo operator (%) can lead to unexpected results when negative numbers are involved. This is because the modulo operator returns the remainder after division, and for negative operands, the result is also negative.

To overcome this problem and correctly determine the modulus of negative numbers, we need to adapt our approach. A common solution is to create a custom modular function to ensure that the results always fall within the desired range.

The following is a modular function implementation that accurately handles positive and negative inputs:

<code class="language-c++">int mod(int x, int m) {
    int r = x % m;
    return r < 0 ? r + m : r;
}</code>
Copy after login

In this function, we first get the remainder of the division using the standard modulo operator. If the remainder is negative, a modulo value is added to convert it to a positive range. Otherwise, we return the remainder as is.

By using this modified modulo function, we can correctly determine the index position in the array, regardless of whether the input is a positive or negative integer. For example:

GetArrayIndex(4, 3) == 1 GetArrayIndex(3, 3) == 0 GetArrayIndex(2, 3) == 2 GetArrayIndex(1, 3) == 1 GetArrayIndex(0, 3) == 0 GetArrayIndex(-1, 3) == 2 GetArrayIndex(-2, 3) == 1 GetArrayIndex(-3, 3) == 0 GetArrayIndex(-4, 3) == 2

With this approach we can efficiently loop through the array using indices that correctly handle positive and negative numbers.

The above is the detailed content of How Do We Correctly Calculate the Modulo of Negative Numbers?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template