Проверка работоспособности модульного подразделения Java

Если мое модульное разделение верно; 1 / 5 mod 11 = 9, Кто-нибудь может это подтвердить?

Тем не менее, в Java; 1 / 5 % 11 = 0;

Я не уверен, что здесь происходит, это мой синтаксис, мне нужно каким-то образом заключить его в скобки?

Я сейчас запутался:)

Может кто-нибудь посоветовать?

Спасибо

4 ответа

Решение

Это то же самое, что (1/5) мод 11.

(или, альтернативно, такой же, как 1 / (5 мод 11), который все еще равен 1/5 == 0 [слева направо это будет (1/5) мод 11, хотя])

1/5 = 0 (для целых чисел)

0 мод 11 = 0

1 / 5 мод 11 = 9. Может кто-нибудь это подтвердить?

(9 * 5)% 11 = 45% 11 = 1. Итак, да 9 - это модульная мультипликативная инверсия 5 в стране 'mod 11'.

Проблема в том, что в Java есть только целые числа и нет модульной арифметики. В Java % это просто оператор, как *,

С http://en.wikipedia.org/wiki/Modular_arithmetic

Понятие модульной арифметики связано с понятием остатка в делении.

Так, mod 11 а также % 11 связаны, но не одно и то же!

http://www.difranco.net/cop2551/java_op-prec.htm указывает, что *, / и% имеют одинаковый порядок приоритета, но в выражении / имеют приоритет над%. Таким образом, приведенный выше результат Java является правильным по отношению к JLS.

Это из-за приоритета оператора.

Java действительно проходит там, где это упрощает экспресс. Он выполняет некоторые операции, затем при следующем проходе выполняет некоторые другие. "Самые высокие" операторы делаются первыми. Например, умножение перед сложением. Операторы ( ) находятся в первом проходе и позволяют вам переопределить нормальный порядок действий.

Смотрите этот график: введите описание ссылки здесь

% находится в той же группе, что и * а также /, Они сделаны слева направо.

Так ты хочешь (1/5) % 11

Но у вас есть другая проблема в том, что это будет сделано в математике с плавающей запятой, поэтому вы получите приблизительный, а не точный правильный ответ.

Вам нужно использовать BigInteger класс вместо встроенных примитивов.

Другие вопросы по тегам