# How parentheses effects multiplication with pi ?

7 views (last 30 days)
Emre Doruk on 4 Aug 2020
Edited: Bruno Luong on 5 Aug 2020
Hi,
I am trying to generate sine wave. I am usning following two code lines. But they are slightly different (about e-15). Why is it happenning ? What is the differences of two lines;
f0=5e2;
fs=500e2;
len=3e3;
dt=1/fs;
t=0:dt:(len-1);
sing1= sin (2*pi*f0*t);
sing2= sin(2*pi*(f0*t));
isequal(sing1,sing2)

Bruno Luong on 5 Aug 2020
Edited: Bruno Luong on 5 Aug 2020
"While floating-point addition and multiplication are both commutative (a + b = b + a and a × b = b × a), they are not necessarily associative. That is, (a + b) + c is not necessarily equal to a + (b + c). ... "
• "(2*pi*f0*t)" interpreted by MATLAB as ((2*pi)*f0)*t
• "2*pi*(f0*t)" interpreted by MATLAB as (2*pi)*(f0*t)
As floating-point multiplication is NOT ASSOCIATIVE, both results might be different.

Emre Doruk on 5 Aug 2020
Bruno Luong on 5 Aug 2020
Sometime this non-associativity is a real headeach, such as finding a limits of a sign- alternate series by partial sum, or integral of an oscillated signal (any wave propagation SW might encounters this). There is a real challenge to know what really the limits and the order of the sum can make the result change widely.
Emre Doruk on 5 Aug 2020
Actually I realized it recently, I thougth this problem is about pi. Because it is irrational and maybe MATLAB coverge it sth. I asked for this reason but I see that it is more common from this. I should check all of my old codes which needs exact values. Genereally it can be accept like precision mistake but sometimes I really need exact value.

madhan ravi on 4 Aug 2020
In the first the order of operation is from left to right.
In the second the order of operation is inside the parenthesis and then the outer.

Stephen Cobeldick on 5 Aug 2020
"Because it is the same oparetaion, left to right or the right to left. "
No, that is incorrect.
In general operations on binary floating point numbers are NOT associative:
A classic example of this is called catastrophic cancelation:
>> (1 + 1e100) - 1e100
ans =
0
>> 1 + (1e100 - 1e100)
ans =
1
"Why is it happenning?"
Because of the well-documented properties of binary floating point numbers.
Emre Doruk on 5 Aug 2020
madhan ravi on 5 Aug 2020
Thanks Stephen:)