2015-09-08 10 views
0

Я недавно начал изучать код (Java) и посмотрел оператор модуля на веб-сайте Oracle в соответствии с разделом 15.17.3 , по следующей ссылке:Концепция модуля Java - определение арифметики (a/b) * b + (a% b)

http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3

В принципе, если a знаменатель, и b это числитель, он утверждает, что: (a/b) * b + (a%b) = a, который определяет оператор модуля как: a%b = a – (a/b) * b.

Я смущен, потому что уравнение просто не работает, что можно упростить как a%b = 0. Я знаю свою основную математическую алгебру, поэтому я надеюсь, что кто-нибудь сможет просветить меня о том, как она должна равняться?

+0

Там нет по модулю оператора на Java. Это [оператор остатка] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3). – EJP

ответ

1

Для целых чисел, оператор / означает интегральное разделение, а не математические один, например:

7/2 = 3 
6/2 = 3 
5/2 = 2 
4/2 = 2 
3/2 = 1 
2/2 = 1 
1/2 = 0 

В математике терминах, формула из Java спецификации будет написана как:

⌊a/b⌋ * b + (a%b) = a 
a%b = a – ⌊a/b⌋ * b 
+1

Приятное использование символа математики полов, но я считаю, что '⌊x⌋' - это' Math.floor (x) ', который округляется к отрицательной бесконечности, а' a/b' округляется к '0'. Пока 'a' и' b' положительны, вы все же хороши, и кто в здравом уме, в любом случае, пробует модуль на отрицательных числах. – Andreas

+0

@ Andreas nice catch –

+0

Это последнее уравнение действительно имеет смысл, когда вы думаете о том, что на самом деле делает оператор остатка, и это отношения с интегральным делением. – xdhmoore

Смежные вопросы