Skip to content
Advertisement

Calculate product in Java, term vs. a ‘for’ loop, different results

Consider:

    long y = 1;
    for (int i = 49; i > 43; i--) {
        y*= i;
    }

    long x = 49*48*47*46*45*44; // = 1478412928
    long y                      // = 10068347520

Why are the results different although the calculation is even?

Is there an explanation?

Advertisement

Answer

49*48*47*46*45*44 is a multiplication of int literals, and therefore performs int multiplications resulting in an int value. It overflows in this case (since the result is larger than Integer.MAX_VALUE) before you assign the result to the long variable. Hence the result is incorrect.

Change it to 49L*48*47*46*45*44 or (long)49*48*47*46*45*44 to perform long multiplication.

In your first calculation, on the other hand, you begin with a long variable whose value is 1, and the loop multiplies that long with an int in each iteration, performing long multiplication, so there’s no overflow.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement