order of operations with division and multiplication

Discussion in 'C++' started by Tim923, Apr 8, 2005.

1. Tim923Guest

The following lines were tried:

x1 = (-b + sqrt(pow(b,2)-(4*a*c))) /(2*a);

x1 = (-b + sqrt(pow(b,2)-(4*a*c))) / 2*a;

I noticed that the last parentheses were optional and didn't change
anything.
Although if I mean 1/(2*5)=0.1 then 1/2*5=2.5 is not the same. What
is the difference?

Tim923, Apr 8, 2005

2. Pete BeckerGuest

Tim923 wrote:
> The following lines were tried:
>
> x1 = (-b + sqrt(pow(b,2)-(4*a*c))) /(2*a);
>
> x1 = (-b + sqrt(pow(b,2)-(4*a*c))) / 2*a;
>
>
> I noticed that the last parentheses were optional and didn't change
> anything.
> Although if I mean 1/(2*5)=0.1 then 1/2*5=2.5 is not the same. What
> is the difference?
>

It's not order, but grouping. That is, you have to be sure that each
operation gets applied to the correct operands. Generally speaking, math
operators group from left to right, so a/b*c says that a should be
divided by b, and the result multiplied by c. To change this grouping,

--

Pete Becker
Dinkumware, Ltd. (http://www.dinkumware.com)

Pete Becker, Apr 8, 2005

3. EvanGuest

It should matter, and does for me. Sure you tried it with something
other than a=1?

Evan, Apr 8, 2005
4. marbacGuest

Tim923 wrote:

> Although if I mean 1/(2*5)=0.1 then 1/2*5=2.5 is not the same. What
> is the difference?
>

The Rank of both operators / and * is the same in the second example,
but the associativity in this case is from left to right. That means
that operator 1/2 is calculated first, after this 1/2 is multiplied by 5.

Due to higher Rank of "()" 2*5 is calculated before the division in the
first example.

marbac, Apr 8, 2005
5. Tim923Guest

Evan wrote:
>It should matter, and does for me. Sure you tried it with something
>other than a=1?

That's it. I think a was 1.

Tim923, Apr 8, 2005