Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #4106

Re: Java puzzler

From Tom Anderson <twic@urchin.earth.li>
Newsgroups comp.lang.java.programmer
Subject Re: Java puzzler
Date 2011-05-15 11:16 +0100
Organization Stack Usenet News Service
Message-ID <alpine.DEB.2.00.1105151107130.12373@urchin.earth.li> (permalink)
References (10 earlier) <jY-dnS9ZV4RyG1HQnZ2dnUVZ_tadnZ2d@earthlink.com> <alpine.DEB.2.00.1105140954470.12373@urchin.earth.li> <iqm848$52b$1@dont-email.me> <alpine.DEB.2.00.1105150033090.12373@urchin.earth.li> <iqnakv$t9g$1@dont-email.me>

Show all headers | View raw


On Sat, 14 May 2011, markspace wrote:

>>> On 5/14/2011 2:18 AM, Tom Anderson wrote:
>
>> I'm only saying that the semantics would be defined in terms of 
>> infinite precision; the implementation could be anything the compiler 
>> can come up with which simulates the semantics. Since we're talking 
>> about fairly small expressions with integers, i would expect it to do a 
>> good job of finding efficient ways to compute things. For example, in 
>> the c = (b + b) - b case, it would be free to reduce that to c = b.
>
> I think I understand what you are saying, but that's not what I'm after, 
> personally.
>
> What I'm saying is: at the machine level, the implementation is free to throw 
> an excpetion if any intermediate calculation overflows.  I think that's the 
> difference between "infinite precision" and saying the compiler and optimizer 
> have some latitude.

Okay, i think we now understand where we both stand. And, of course, i 
think your desires are unnatural, and that you hate freedom.

> What I'm really worried about is how do you simulate "infinite 
> precision" with longs or something like that, where there is no larger 
> width word?  It becomes a mess. Then there's also really large numbers 
> of small width integers, which could overflow quickly, but "infinite 
> precision" means they don't overflow until the end.  Both of those 
> scenarios are impractical to implement with "infinite precision" I 
> think.

I was mostly thinking about the infinite width rule being something that 
gives permission for algebraic optimisation. For example, if you evaluate 
c = (b + b) - b with infinite width, then whatever the value of b, you end 
up with c = b. So, the infinite width rule gives the compiler permission 
to make that optimisation.

But you're right, in that there are possible, and even realistic, cases, 
which can't be optimised away and where a calculation with a tolerably 
small result has some intolerably large intermediate values. Anything 
like:

long a, b, c;
long d = (a * b) % c;

Runs that risk. Having access to a 128-bit integer type in the hardware 
wouldn't fix it, either, because:

long a, b, c, d, e, f, g, h, i, j, k, l;
long z = (a * b * c * d * e * f) / (g * h * i * j * k * l);

And because these are integers, i don't think you can get away with 
rewriting to a more plausible:

long z = (a / g) * (b / h) * (c / i) * (d / j) * (e / k) * (f / l);

>> The problem is that not all correct results are practical to compute 
>> with finite-width arithmetic. That means that as well as a rule that 
>> results have to be correct, we have to have a rule about when results 
>> that would be correct explode.
>
> It's alright for a result to not be correct, as long the system throws 
> an exception instead.  That's the rule: incorrect result means throw an 
> exception.
>
> Just to be 100% clear, what I'm really after is for Java to use the 
> existing hardware detection that exists in most platforms for integer 
> overflow/underflow.  It's practically cost free, and would really go a 
> long ways to making programs error-free, imo.  That's what I'm gunning 
> for.

Fair enough. I suppose my position is that this hardware ability has to be 
used in the service of some solidly well-defined software semantics. 
Throwing exceptions at random from arithmetic expressions is not what i 
think of as solidly well-defined.

tom

-- 
Nullius in verba

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Re: Java puzzler Gábor Bakos <aborgabor@gmail.com> - 2011-05-11 01:44 -0700
  Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-11 05:24 -0700
    Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-11 21:57 +0100
      Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-11 16:07 -0700
        Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-12 21:38 +0100
          Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-12 13:45 -0700
            Re: Java puzzler Nancy 3 <n3@gmai1.c0m> - 2011-05-12 16:56 -0400
              Re: Java puzzler markspace <-@.> - 2011-05-12 14:32 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-12 16:05 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-12 17:40 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-12 18:18 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-12 19:26 -0700
                Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-14 10:18 +0100
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-14 08:09 -0700
                Re: Java puzzler Lew <noone@lewscanon.com> - 2011-05-14 13:00 -0400
                Re: Java puzzler Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-05-14 15:08 -0400
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-14 13:25 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-14 08:46 -0700
                Re: Java puzzler Spock <spock@starfleet.ufp> - 2011-05-14 19:33 -0400
                Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-15 00:41 +0100
                Re: Java puzzler markspace <-@.> - 2011-05-14 18:35 -0700
                Re: Java puzzler Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-05-14 23:43 -0400
                Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-15 11:16 +0100
                Re: Java puzzler markspace <-@.> - 2011-05-15 05:40 -0700
                Re: Java puzzler Tom Anderson <twic@urchin.earth.li> - 2011-05-15 15:23 +0100
                Re: Java puzzler markspace <-@.> - 2011-05-15 08:09 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-15 07:37 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-15 08:00 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-15 08:16 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-15 07:35 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-15 08:11 -0700
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-15 08:15 -0700
                Re: Java puzzler Lew <noone@lewscanon.com> - 2011-05-15 13:11 -0400
                Re: Java puzzler Nancy 3 <n3@gmai1.c0m> - 2011-05-12 20:47 -0400
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-12 18:00 -0700
                Re: Java puzzler markspace <-@.> - 2011-05-12 18:01 -0700
                Re: Java puzzler Nancy 3 <n3@gmai1.c0m> - 2011-05-12 21:22 -0400
                Re: Java puzzler Patricia Shanahan <pats@acm.org> - 2011-05-12 18:32 -0700
                Re: Java puzzler Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-05-12 22:34 -0400
              Re: Java puzzler Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-05-12 22:27 -0400
      Re: Java puzzler "John B. Matthews" <nospam@nospam.invalid> - 2011-05-12 00:28 -0400
      Re: Java puzzler Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-05-12 10:33 -0400
  Re: Java puzzler Lew <noone@lewscanon.com> - 2011-05-11 09:12 -0400
  Re: Java puzzler Lew <noone@lewscanon.com> - 2011-05-11 09:13 -0400
  Re: Java puzzler markspace <-@.> - 2011-05-11 08:00 -0700

csiph-web