# c++ – Does one double promote every int in the equation to double?

## c++ – Does one double promote every int in the equation to double?

I purposefully did not compile and run then on my system, since this is the type of thing that could be compiler dependent.

This is not compiler dependent. C++ clearly defines the order of these operations and how they are converted.

How the conversion happens is dependent on the order of operations.

``````double result1 = a + b / d + c; // equal to 4 or to 4.5?
``````

In this example, the division happens first. Because this is an int divided by a double, the compiler handles this by converting the int into a double. Thus, the result of `b / d` is a double.

The next thing that C++ does is add `a` to the result of `b / d`. This is an int added to a double, so it converts the int to a double and adds, resulting in a double. The same thing happens with `c`.

``````double result3 = a / b + d; // equal to 4 or to 4.5?
``````

In this example, division is handled first. `a` and `b` are both ints, so no conversion is done. The result of `a / b` is of type int and is 0.

Then, the result of this is added to `d`. This is an int plus a double, so C++ converts the int to a double, and the result is a double.

Even though a double is present in this expression, `a / b` is evaluated first, and the double means nothing until execution reaches the double. Therefore, integer division occurs.

I find promotion and conversion rules pretty complex. Usually integer-like numbers (short, int, long) are promoted to floating-point equivalents (float, double). But things are complicated by size differences and sign.

See this question for specifics about conversion.

Does one `double` promote every `int` in the equation to `double`?

No. Only the result of a single operation (with respect to precedence).

``````double result1 = a + b/d + c; // equal to 4 or to 4.5?
``````

4.5.

``````double result2 = (a + b)/d + c; // equal to 3 or to 3.75?
``````

3.75.

``````double result3 = a/b + d; // equal to 4 or to 4.5?
``````

4.

#### c++ – Does one double promote every int in the equation to double?

You must consider the precedence of every operator, you must think like a parser:

``````double result1 = a + b/d + c; // equal to 4 or to 4.5?
``````

Thats like a + (b/d) +c because the / operator has the biggest precedence.Then it doesnt matter what of these 2 operations is made for first, because the floating point operand is in the middle, and it infects other operands and make them be double.So its 4.5.

``````double result2 = (a + b)/d + c; // equal to 3 or to 3.75?
``````

Same here, its like ((a+b)/d )+c, so a+b is 3, that 3 becomes a floating point number because gets promoted to double, because is the dividend of d, which is a double, so its 0.75+3, that is 3.75.

``````double result3 = a/b + d; // equal to 4 or to 4.5?
``````

Its like (a/b)+d, so a/b is zero and d is 4, so its 4.
A parser makes all the operations in order of precedence, so you can exactly know what will be the result of the expression.