[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