On 3 February 2012 00:11, Florian Weimer <fwei...@bfk.de> wrote: > Would it make sense to replace (x ^ r) < 0 && (x ^ y) >= 0 > with (x ^ y ^ r) < 0?
That would not be correct. For example, it would signal overflow for -1 + 1. Éamonn On 3 February 2012 00:11, Florian Weimer <fwei...@bfk.de> wrote: > * Roger Riggs: > > > to support addExact(), subtractExact(), negateExact(), multiplyExact(), > > and toIntExact() for int and long primitive types. > > Would it make sense to replace (x ^ r) < 0 && (x ^ y) >= 0 > in > > + public static int addExact(int x, int y) { > + int r = x + y; > + if ((x ^ r) < 0 && (x ^ y) >= 0) { > + throw new ArithmeticException("Addition overflows an int"); > + } > + return r; > + } > > with (x ^ y ^ r) < 0? > > For substraction, you could use ((x ^ r) & (x ^ y)) < 0. > > Will Hotspot be able to optimize away the string construction on the > exception path in multiplyExact() if the exception is caught locally? > > -- > Florian Weimer <fwei...@bfk.de> > BFK edv-consulting GmbH http://www.bfk.de/ > Kriegsstraße 100 tel: +49-721-96201-1 > D-76133 Karlsruhe fax: +49-721-96201-99 >