sin function strange problem

I have a strange problem that I do not understand. If I use sin(p1) inside a program and in command window, both gave different result.
case-1
% code
A=dlmread('data.dat',',',[1 0 639*60 22]);
p1=A(1,6)
whos p1
p1=2*pi*70e6*p1
whos p1
p2=sin(p1)
whos p2
end
when I run it in command window all p1, p2 shows double and result shows is
p1 = 3.0058e+008 p2 = 2.0422e-008
but in command window if i enter p1 as 3.0058e+008 then sin(p1) = -0.9611
why this difference. pls help

 Akzeptierte Antwort

Jan
Jan am 28 Nov. 2012
Bearbeitet: Jan am 28 Nov. 2012

1 Stimme

The command format controls the precision of the output. Try this to show more digits of the values:
p1 = 3.0058e+008
p2 = p1 + 1
format long g
p1
p2
format short g
p1
p2

3 Kommentare

strunack
strunack am 28 Nov. 2012
This is not helping. pls see my other comment to 1st answer. I am doing some serious mistake.
Jan
Jan am 28 Nov. 2012
Bearbeitet: Jan am 28 Nov. 2012
I claim it would help to enable "format long g", stop the program and display the value of p1. Or set a break point in the function and type:
sprintf('%.16g\n', p1 - 3.0058e8)
I'm sure, that this is not zero.
Remark: SIN is not accurate for such large input.
strunack
strunack am 29 Nov. 2012
your last remark is the actual answer I guess. sin should be calculated for radians around 2*pi
tks

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Ilham Hardy
Ilham Hardy am 28 Nov. 2012

1 Stimme

Perhaps you don't use the same value of p1..
HINT:
sin(95000)
ans =
-0.9818
sin(9.5e4)
ans =
-0.9818
sin(95454)
ans =
-0.1506
sin(95545)
ans =
0.2545

7 Kommentare

strunack
strunack am 28 Nov. 2012
I use the same value, same precision. I have some mistake in basic floating point operation. As I just now tried,
sin(pi)
ans =
1.2246e-016
but sin(3.141)
ans =
0.00059265
pls guide me.
No, you're not..
See below:
>> format long
>> pi
ans =
3.141592653589793
>> sin(3.141592653589793)
ans =
1.224646799147353e-016
>> sin(3.141)
ans =
5.926535550994539e-004
>> format short g
>> sin(3.141)
ans =
0.00059265
Jan
Jan am 28 Nov. 2012
I do not see any problem here. Of course PI cannot be represented exactly using a limited precision only. Therefore sin(pi) cannot be exactly zero.
Please explain what results you are expecting. Currently I'm convinced that the problem is found in your expectations, but not in the calculations.
strunack
strunack am 28 Nov. 2012
Ooops, I made such a silly mistake and failed to notice that both results are actually approaching zero. I am really sorry, but I have diverted the original question by myself. Sorry for that.
Lets now come back to original question.
if run the code as given in original question I get sin(p1)= 2.0422e-008 which is close to zero. (where p1= 3.0058e+008;)
But the true result should be -0.96106.
If in command prompt I type >> p2=sin(3.0058e+008)
p2 =
-0.96106
tks
Why do you think
p2=sin(3.0058e+008)
p2 =
-0.96106
is correct?
Jan
Jan am 28 Nov. 2012
Bearbeitet: Jan am 28 Nov. 2012
Are you really sure, that "p1" in your function is exactly 3.0058000000000000e8 and if so, how did you test it? Please note that tiny rounding errors must occur when the binary value is converted to decimal for the display. There are e.g. a lot of sin waves between 3.005800e8 and 3.005799e8, but with 5 digits precision both values are displayed equally.
I'm still convinced that the number inside the function is displayed with 5 digits only and that the following digits are not zero. Therefore I still think that "format long g" allows to see this difference, although it cannot "solve" it. But there is no way to "solve" it, because it is based on a misunderstanding only.
strunack
strunack am 29 Nov. 2012
Accepted! format long g shows both result similar. thank you.

Melden Sie sich an, um zu kommentieren.

Gefragt:

am 28 Nov. 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by