On 3 February 2012 10:22, Vitaly Davidovich <vita...@gmail.com> wrote:
> x == Integer.MIN_VALUE should be faster than x == -x as it's a cmp against a 
>constant whereas the latter requires negating x (that's a dependency too), 
>tying up a register to store the negation, and then doing the cmp.

The value -x is needed anyway since it's the return value. But a more
important reason why my idea is a bad one is that the condition is
true for x == 0! Writing x == -x && x != 0 is definitely not an
improvement.

Éamonn


On 3 February 2012 10:22, Vitaly Davidovich <vita...@gmail.com> wrote:
>
> x == Integer.MIN_VALUE should be faster than x == -x as it's a cmp against a 
> constant whereas the latter requires negating x (that's a dependency too), 
> tying up a register to store the negation, and then doing the cmp.
>
> Sent from my phone
>
> On Feb 3, 2012 12:53 PM, "Eamonn McManus" <eam...@mcmanus.net> wrote:
>>
>> My initial remarks:
>>
>> In negateExact, the condition x == -x should be faster to evaluate than x
>> == Integer.MIN_VALUE and reflects the intent just as well.
>>
>> In addExact and subtractExact, I would be inclined to implement the int
>> versions using long arithmetic, like this:
>>
>> long lr = x + y;
>> int r = (int) lr;
>> if (r == lr) {
>>  return r;
>> } else {
>>  throw...
>> }
>>
>> I would use this technique of cast-and-compare in the int multiplyExact
>> instead of comparing against MIN_VALUE and MAX_VALUE, and especially in
>> toIntExact(long).
>>
>> I agree with Stephen Colebourne that brief implementation comments would be
>> useful. But I disagree with his proposed further methods in Math
>> (increment, decrement, int+long variants), which I don't think would pull
>> their weight.
>>
>> Éamonn
>>
>>
>> On 2 February 2012 12:15, Roger Riggs <roger.ri...@oracle.com> wrote:
>>
>> > There is a need for arithmetic operations that throw exceptions
>> > when the results overflow the representation of int or long.
>> >
>> > The CR is 6708398: Support integer overflow <http://bugs.sun.com/**
>> > bugdatabase/view_bug.do?bug_**id=6708398<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6708398>
>> > >
>> >
>> > Please review this webrev <http://cr.openjdk.java.net/%**
>> > 7Erriggs/CR6708398/webrev/<http://cr.openjdk.java.net/%7Erriggs/CR6708398/webrev/>>
>>
>> > to add static methods in java.lang.Math
>> > to support addExact(), subtractExact(), negateExact(), multiplyExact(),
>> > and toIntExact() for int and long primitive types.
>> >
>> > Thanks, Roger Riggs
>> >

Reply via email to