[Chicago] Can anyone explain this behavior in Java?

Philip Doctor diomedestydeus at gmail.com
Mon Mar 23 17:42:05 CET 2015


Unless you're doing a lot of repeated math on floats, I wouldn't expect a
significant precision error here.

hint: I finally looked at the code because this email chain made me grumpy,
it's not a float error.  It's just a bug in Douglas' code.


On Mon, Mar 23, 2015 at 11:16 AM, Garrett Smith <g at rre.tt> wrote:

> You're not seeing a bug - this is expected behavior.
>
> http://floating-point-gui.de/
>
> http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
>
> On Mon, Mar 23, 2015 at 9:59 AM, Lewit, Douglas <d-lewit at neiu.edu> wrote:
> > Not my left foot or right foot, it's my nose that's itching!   ;-)   I
> > actually went over my program and printed out the intermediate values
> > (values BEFORE any computation of the probability).  Interestingly
> enough,
> > all the values look just fine, so I'm still scratching my head on this
> one.
> > My professor never replied to my email, so this is where I'll have to
> get a
> > little aggressive and just corner him in his office during office hours.
> >
> > I actually contemplated sending my code to Oracle, but I'm sure I'll get
> a
> > reply like, "Do you think this is Homework Central?  Don't bother us with
> > such trivia!!!"  But hey, why not?  Worst case scenario, they'll just
> ignore
> > me.
> >
> > The only thing I found on Stack Overflow was something to the effect of
> > "double division can produce roundoff errors", and that was a segue into
> the
> > BigDecimal class.  We'll see.
> >
> > In Python, this problem is very simple to do.  In Java, even a simple
> walk
> > in the park gets transformed into a Thanksgiving Day parade!
> >
> > On Mon, Mar 23, 2015 at 7:43 AM, Jeremy McMillan <
> jeremy.mcmillan at gmail.com>
> > wrote:
> >>
> >> Doug, don't throw away Java, but do abandon java questions on the Python
> >> mailing list.
> >>
> >> Might we suggest you inquire at an appropriate forum?
> >>
> >> Chicago Java Users Group (Chicago, IL) - Meetup
> >>
> >>
> >> Actually, I think your questions might get the best reception from
> >> http://stackoverflow.com/
> >>
> >> Please repost there, and try to restrain your urges to post off topic. I
> >> want to help, but after not too many empirical trials the probability
> that I
> >> will discover something Python related to address in your posts gets
> >> vanishingly small, and I'm likely to skip them without reading them.
> That
> >> would be a waste, because you seem to spend a lot of time making them.
> Your
> >> right foot is itching, but you're scratching your left foot.
> >>
> >> On Mon, Mar 23, 2015 at 1:49 AM, Lewit, Douglas <d-lewit at neiu.edu>
> wrote:
> >>>
> >>> Hey guys,
> >>>
> >>> I'm pretty impressed with Python's dictionary data structure, so I did
> >>> some research and found out that Java has something equivalent called a
> >>> "HashMap".  (Is that the same as a hash table or lookup table?  I
> guess it
> >>> is.)  I'm also interested in simulating games of chance, so I decided
> to
> >>> write a couple programs to simulate the game of rolling four dice.  (In
> >>> statistics textbooks they always talk about rolling two dice, but that
> gets
> >>> really boring after a while.  Why not three or four dice, right?)  If
> you
> >>> roll four dice and record the sums, the sums can range from 4 (so you
> rolled
> >>> all 1's) to 24 (which means you rolled all 6's).  The domain or sample
> space
> >>> for this problem thus includes all integers from 4 to 24, inclusive.
> But
> >>> then you have to compute the probability values.  I decided to compute
> >>> empirical probabilities by creating a random object that simulates
> throwing
> >>> a die.  Pretty simple, right?
> >>>
> >>> I'm attaching two different but very closely related .java files.  In
> one
> >>> I just use an array to store the probabilities.  In the other I use
> the Java
> >>> version of a dictionary or "HashMap".  Arrays are great, but with an
> array
> >>> all the keys are sequentially ordered integers starting at 0.  Well
> for this
> >>> problem I don't want to start at 0; I want to start at 4, so it makes
> more
> >>> sense to use some type of dictionary, right?
> >>>
> >>> Everything compiles and runs just great!  That's not the problem.  The
> >>> problem is this.  If you look at my program that uses a HashMap, check
> out
> >>> the empirical probabilities.  The final digits of the decimal are just
> >>> screwed up!  For example, let's say that I run my simulation 1,000,000
> >>> times, and in 1,000,000 throws of four dice I get a sum of 4 775 times,
> >>> okay?  So the probability for rolling a 4 should be 0.000775, right?
> When I
> >>> use an array, that's exactly what I get.  But with a HashMap I'm
> getting
> >>> 0.0007750000775.  ?????   What the hell is that?  I tried using
> >>> System.out.printf and System.out.format but they don't work!  I'm
> really at
> >>> a loss.  I just don't get it.  It's not a big tragedy and the program
> still
> >>> basically works, but I guess I'm disappointed because my first HashMap
> >>> program has a bug in it!  If anyone can shed light on this bug, hey,
> then
> >>> please enlighten me cause I can't figure it out.
> >>>
> >>> Take it easy and thanks for the suggestions.
> >>>
> >>> Best,
> >>>
> >>> Douglas Lewit
> >>>
> >>> P.S.  I can just hear someone out there saying, "Doug, throw Java away
> >>> and just stick with Python!"  While that is extremely tempting, right
> now
> >>> that's not an option.  I want to pass my Java course with at least a B!
> >>> :-)
> >>>
> >>>
> >>> _______________________________________________
> >>> Chicago mailing list
> >>> Chicago at python.org
> >>> https://mail.python.org/mailman/listinfo/chicago
> >>>
> >>
> >>
> >> _______________________________________________
> >> Chicago mailing list
> >> Chicago at python.org
> >> https://mail.python.org/mailman/listinfo/chicago
> >>
> >
> >
> > _______________________________________________
> > Chicago mailing list
> > Chicago at python.org
> > https://mail.python.org/mailman/listinfo/chicago
> >
> _______________________________________________
> Chicago mailing list
> Chicago at python.org
> https://mail.python.org/mailman/listinfo/chicago
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20150323/fea8fd24/attachment.html>


More information about the Chicago mailing list