It looks like this could be rearranged to

long result = first * radix + second;
int guard = radix * (int) (first >>> 57);
if (guard >= 128 || (result >= 0 && guard >= 128 - Character.MAX_RADIX)) {
…

provided reasonable comments were added. I understand the first part of this 
conditional, guard >= 128, but the second part eludes me. Would you please 
explain this part.

BTW this works for the test case in question, of course.

On Dec 21, 2013, at 2:04 AM, Dmitry Nadezhin wrote:

> I can weaken the question:
> Is there a reason to prefer extra int multiplication to the cache ?
> 
> long result = first * radix + second;
> final int GUARD_BIT = 7;
> int guard = radix * (int) (first >>> (Long.SIZE - GUARD_BIT));
> if (guard >= (1 << GUARD_BIT) - Character.MAX_RADIX
>     && (guard >= (1 << GUARD_BIT) || result >= 0)) {
>  . . .

Reply via email to