sourcecode

Java의 Mod는 음수를 생성합니다.

copyscript 2022. 7. 26. 23:30
반응형

Java의 Mod는 음수를 생성합니다.

계산할 때int i = -1 % 2나는 이해한다-1자바어.Python에서는1의 결과로서-1 % 2modulo 기능으로 자바에서도 같은 동작을 하려면 어떻게 해야 하나요?

문제는 Python에서는 % 연산자가 계수를 반환하고 Java에서는 나머지를 반환한다는 것입니다.이러한 함수는 양의 인수에 대해 동일한 값을 제공하지만 계수는 항상 음의 입력에 대해 양의 결과를 반환하고 나머지는 음의 결과를 제공할 수 있습니다. 질문에는 그것에 대한 더 많은 정보가 있습니다.

이렇게 하면 양의 값을 찾을 수 있습니다.

int i = (((-1 % 2) + 2) % 2)

또는 다음과 같습니다.

int i = -1 % 2;
if (i<0) i += 2;

(-1 또는 2는 원하는 분자나 분모가 될 수 있습니다.)

Java 8에서는 Math.floor Mod() 메서드를 사용할 수 있습니다.

Math.floorMod(-1, 2); //== 1

주의: modulo-value(여기서)의 경우2)는 음수입니다.모든 출력값도 음수가 됩니다.:)

출처 : https://stackoverflow.com/a/25830153/2311557

필요하시면n % m그 후, 다음과 같이 합니다.

int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);

수학적 설명:

n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))
if b > 0:
    int mod = (mod = a % b) < 0 ? a + b : a;

를 사용하지 않습니다.%연산자를 두 번 누릅니다.

계수가 2의 거듭제곱인 경우 비트마스크를 사용할 수 있습니다.

int i = -1 & ~-2; // -1 MOD 2 is 1

이에 비해 Pascal 언어는 두 개의 연산자를 제공합니다. REM은 분자의 부호를 사용합니다.x REM yx - (x DIV y) * y어디에x DIV yTRUNC(x / y)) 및 MOD에는 양의 분모가 필요하며 양의 결과가 반환됩니다.

언급URL : https://stackoverflow.com/questions/5385024/mod-in-java-produces-negative-numbers

반응형