필터 지우기
필터 지우기

Same calcuation, but hand-result is different from code result

조회 수: 1 (최근 30일)
JingChong Ning
JingChong Ning 2023년 2월 22일
답변: Image Analyst 2023년 2월 22일
I have this code:
aoamid = (2*0.6*sqrt(1-((0)/4)^2)/(pi^2)+0.6/(8*pi))
CLnew = (aoamid+0.01)/(2*sqrt(1-((0)/4)^2)/(pi^2)+1/(8*pi))
m = (CLnew-0.6)/(0.01)
aoafinal = aoamid - 0.6/m
However, the result from hand-calculation is different from the answer generated by the code: (left is hand-calculated result)

답변 (2개)

Star Strider
Star Strider 2023년 2월 22일
This simply appears to be a precision issue. Using round on the intermediate results provides the same result as the calculator —
format longG
aoamid = (2*0.6*sqrt(1-((0)/4)^2)/(pi^2)+0.6/(8*pi))
aoamid =
0.14545866183459
CLnew = (aoamid+0.01)/(2*sqrt(1-((0)/4)^2)/(pi^2)+1/(8*pi))
CLnew =
0.641248832653383
m = (CLnew-0.6)/(0.01)
m =
4.1248832653383
aoafinal = aoamid - 0.6/m
aoafinal =
3.05311331771918e-16
Check = round(aoamid,4) - 0.6/round(m,4)
Check =
4.19282891706563e-05
.

Image Analyst
Image Analyst 2023년 2월 22일
If you use more digits than 4 (like the script uses) you'll see that the values are very close -- both essentially zero being around 1e-16. When you're dealing with numbers in the 0.1 to 100 range or whatever, anything that's a difference that's less than about 1e-8 or so is essentially zero and due to truncation error.
format long g
aoamid = (2*0.6*sqrt(1-((0)/4)^2)/(pi^2)+0.6/(8*pi))
aoamid =
0.14545866183459
CLnew = (aoamid+0.01)/(2*sqrt(1-((0)/4)^2)/(pi^2)+1/(8*pi))
CLnew =
0.641248832653383
m = (CLnew-0.6)/(0.01)
m =
4.1248832653383
aoafinal = aoamid - 0.6/m
aoafinal =
3.05311331771918e-16
aoafinal_using4digits = 0.1455 - 0.6 / m
aoafinal_using4digits =
4.13381654106593e-05
% now do with a lot more decimal places:
aoafinal_fullprecision = 0.14545866183459 - 0.6 / 4.1248832653383
aoafinal_fullprecision =
7.7715611723761e-16
See, the difference is around 1e-16 when using script variables or full precision of about 14 decimal places, but when you use only 4 decimal places, the difference (error) is more, like 1e-5.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by