Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Algorithm to determine if number is between two numbers in modular arithmetic

I'm trying to write a function that answers the question: if you start counting at a and stop counting at b, is c in that range (aka is c between a and b).

Normally a < c && c < b would suffice, but I'm in modular arithmetic:

(Diagram)

Counter-clockwise is increasing.

Green colors: are values for c where the algorithm should indicate true (where c is between a and b)

Blue colors: are values for c where the algorithm should indicate false (where c is not between a and b) (which happens to be the same as where c is between b and a)

The simple a < c && c < b fails where the range of a and b crosses over 0.

For example, say A = 300 and B = 45. If C is 10 then the function should return true: 300, 301, 302 ... 359, 0, 1, 2, 3 ... 8, 9, 10, 11, 12 ... 43, 44, 45. Therefore, 10 is between 300 and 45 in mod 360.

Ultimately, what I'm trying to determine is if one hue is between two other hues, where hues are specified in degrees around a color wheel (which is a mod 360 system). It would be great if the answer was in terms of mod n so it would solve the general case and not be specific to my problem though.

like image 423
Kevin Johnson Avatar asked Aug 06 '15 18:08

Kevin Johnson


People also ask

What is modular arithmetic algorithm?

In mathematics, modular arithmetic is a system of arithmetic for integers, where numbers "wrap around" when reaching a certain value, called the modulus. The modern approach to modular arithmetic was developed by Carl Friedrich Gauss in his book Disquisitiones Arithmeticae, published in 1801.

What does a ≡ b mod n mean?

For a positive integer n, two integers a and b are said to be congruent modulo n (or a is congruent to b modulo n), if a and b have the same remainder when divided by n (or equivalently if a − b is divisible by n ). It can be expressed as a ≡ b mod n. n is called the modulus.


1 Answers

bool between = C<A ^ C<B ^ B<A;
like image 67
I. J. Kennedy Avatar answered Sep 30 '22 01:09

I. J. Kennedy