[Chicago] Can anyone explain this behavior in Java?

Lewit, Douglas d-lewit at neiu.edu
Mon Mar 23 19:10:19 CET 2015


I'll buy you a beer if you tell me what the bug is.....???  My program's
output is making *me* grumpy!  Is it the line where I do something like
this:

IntegerType.doubleValue( )

I thought that's kosher..... I mean, the doubleValue( ) method converts the
int attribute of the Integer to its equivalent double value?  Or.... maybe
my System.out.printf or System.out.format lines are messed up.  Oh well....
time to give up programming and think about a career in politics.  I
mean.... how smart do you have to be to become a great politician?   :-)

Now, about that beer!  Which is your favorite?


On Mon, Mar 23, 2015 at 11:42 AM, Philip Doctor <diomedestydeus at gmail.com>
wrote:

> 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
>>
>
>
> _______________________________________________
> 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/7adc458d/attachment.html>


More information about the Chicago mailing list