Win a copy of Escape Velocity: Better Metrics for Agile Teams this week in the Agile and Other Processes forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Liutauras Vilda
  • Tim Cooke
  • Paul Clapham
  • Jeanne Boyarsky
Sheriffs:
  • Ron McLeod
  • Frank Carver
  • Junilu Lacar
Saloon Keepers:
  • Stephan van Hulst
  • Tim Moores
  • Tim Holloway
  • Al Hobbs
  • Carey Brown
Bartenders:
  • Piet Souris
  • Frits Walraven
  • fred rosenberger

Why is modulo operator producing these results

 
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The following code is yielding non-zero results. I thought that 10% any number less than 10 and >=0 should be zero.




Following is output:




Thanks
 
author
Posts: 23928
142
jQuery Eclipse IDE Firefox Browser VI Editor C++ Chrome Java Linux Windows
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Stephen-Austin Murphy wrote:The following code is yielding non-zero results. I thought that 10% any number less than 10 and >=0 should be zero.




Following is output:




Can you explain to us why you think that 1 mod 10 should be zero?

Henry
 
Ranch Hand
Posts: 172
Python MySQL Database Java
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I do agree with Henry here,
How do you think a modulus operator function as?
Once you are able to answer this, I'm certain you would be able to answer the question that you have posted too.
Cheers.
 
Bartender
Posts: 4568
9
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Are you confusing it with division? Any number less than 10 divided by 10 is zero when you're using integers. But that isn't what the modulus operator means.
 
Marshal
Posts: 76486
366
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
It is actually called the remainder operator; even the name might help to explain its purpose.
When I did maths, which was a long time ago, we used modulus (|x|) to mean the absolute value of a number, so |-1| = 1. In most non‑English‑speaking countries it is called modulo and means remainder. A lot of people use modulo to mean remainder in Britain, too.
The remainder operation is very closely related to the division operator; in fact on many computers the two use the same part of the chip and the circuit produces the quotient on one output and the remainder on another output. It is classified by Java as a multiplicative operation and you can read about it in the Java Language Specification, but it may be difficult to understand. You might do well to read only those parts relating to integer arithmetic.
 
Ranch Hand
Posts: 178
2
Netbeans IDE MySQL Database Java
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
% get the remainder. Remind the long division done in small classes. It is done in here...
 
Stephen-Austin Murphy
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks everyone who replied.
<red-face>OMG, I can't believe I had forgotten some basic math.</red-face>

My understanding of the % operator is that it returns the remainder after division.

Here was my reasoning that led to my post:
---------------------------------------------------------------------------------------------------------------
So 1 mod 10 is the remainder of 1 divided by 10.
1 divided by 10 is .1 with no remainder.
---------------------------------------------------------------------------------------------------------------
But just now I actually did the long division:
1 divided by 10 is .1 with .9 as a remainder. So Java rounds to 1.
Similarly, 2 divided by 10 is .2 with 1.8 as a remainder. So Java rounds to 2.
Is the above correct?

Thanks.
 
Matthew Brown
Bartender
Posts: 4568
9
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Stephen-Austin Murphy wrote:
But just now I actually did the long division:
1 divided by 10 is .1 with .9 as a remainder. So Java rounds to 1.
Similarly, 2 divided by 10 is .2 with 1.8 as a remainder. So Java rounds to 2.
Is the above correct?


I think you may still be getting mixed up between integer division and floating-point division.

With real numbers (represented by floating point) there is no such thing as a remainder. We simply have exact division. So 1.0/10.0 = 0.1, and 2.0/10.0 = 0.2.

Remainders only come into play when you're dealing with integers only. In integer arithmetic 1 divided by 10 is zero, with a remainder of 1. There's no rounding going on.
 
Bartender
Posts: 2856
10
Firefox Browser Fedora Java
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
To make the understanding simple, here is how I think of it.
Here 1 is the dividend, 10 is the divisor so in the world of integers 1/10 = 0 and so is 2/10...
Now dividend = divisor x quotient + remainder
So
1 = 10 x 0 + 1
2 = 10 x 0 + 2
and so on.

If you have noticed, the % operator is showing the remainder here, which is the number after the + sign.
Now if the dividend is fully divisible, we will get zero.
For example
100 = 10 x 10 + 0
6 = 3 x 2 + 0
So 100%10 and 6%3 are both 0.



 
Henry Wong
author
Posts: 23928
142
jQuery Eclipse IDE Firefox Browser VI Editor C++ Chrome Java Linux Windows
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Matthew Brown wrote:
I think you may still be getting mixed up between integer division and floating-point division.

With real numbers (represented by floating point) there is no such thing as a remainder. We simply have exact division. So 1.0/10.0 = 0.1, and 2.0/10.0 = 0.2.

Remainders only come into play when you're dealing with integers only
. In integer arithmetic 1 divided by 10 is zero, with a remainder of 1. There's no rounding going on.




Since everyone is helping the OP get clearer, I get to throw a monkey wrench into the works...

The % operator actually works with floating points... for example ...

4.4 % 1.4 = 0.2

Henry
 
Ramesh Pramuditha Rathnayake
Ranch Hand
Posts: 178
2
Netbeans IDE MySQL Database Java
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
In floating point division, convert both divisor and dividend into integer values. (By multiplying 10^x where x is and integer. ^ means power.)
Then do the long division.
Convert the remainder into a float by dividing it by 10^x..!

Don't do long division too much long. Get only the Integer answer. Don't divide remainder again..!!
 
Campbell Ritchie
Marshal
Posts: 76486
366
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
That is correct, but confusingly written. You mean to divide until the quotient reaches its radix point/decimal point and whatever remains is the remainder.
 
Ramesh Pramuditha Rathnayake
Ranch Hand
Posts: 178
2
Netbeans IDE MySQL Database Java
  • Likes 1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Yes.. That is..!!
I'm not fluent in English. I may have done mistakes...
 
Stephen-Austin Murphy
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thank you everyone. Yes, my problem was that I was confusing floating point division and integer division.

I am clear on this now.

Kind regards
 
Campbell Ritchie
Marshal
Posts: 76486
366
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You're welcome
 
It's a tiny ad only because the water is so cold.
the value of filler advertising in 2021
https://coderanch.com/t/730886/filler-advertising
reply
    Bookmark Topic Watch Topic
  • New Topic