이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
고정밀도의 수치 계산
이 예제에서는 Symbolic Math Toolbox™에서 가변 정밀도 연산방식을 사용하여 고정밀도 계산 결과를 구하는 방법을 보여줍니다.
근사 정수를 표현하는 식을 찾습니다. 고전적인 예는 다음과 같습니다. 를 30자리까지 계산해 봅니다. 결과는 반올림 오차가 있는 상태로 표시된 정수로 보입니다.
digits(30); f = exp(sqrt(sym(163))*sym(pi)); vpa(f)
ans =
동일한 값을 40자리까지 계산해 봅니다. 이 값은 정수가 아님을 알 수 있습니다.
digits(40); vpa(f)
ans =
이 현상을 더 조사합니다. 이하 코드에서는 최대 까지의 숫자가 발생하며 조사를 수행하려면 소수점 이하의 정확한 자릿수가 필요합니다. 필요한 작업 정밀도를 계산합니다.
d = log10(exp(vpa(1000)))
d =
정밀도에 따라 값이 달라지는 함수를 처음 호출하기 전에 필요한 정밀도를 설정합니다. 특히 round
, vpa
및 double
이 그러한 함수입니다.
digits(ceil(d) + 50);
형식의 유사한 예를 찾습니다. 물론 163에 어떤 수의 제곱을 곱하면 그러한 숫자 n을 더 많이 얻을 수 있습니다. 그러나 그 외에도 이 형식의 더 많은 숫자가 정수에 가깝습니다. 소수부에 대한 히스토그램 플롯에서 이를 확인할 수 있습니다.
A = exp(pi*sqrt(vpa(1:1000))); B = A-round(A); histogram(double(B), 50)
형식에 대한 근사 정수가 있는지 계산해 봅니다.
A = exp(vpa(1:1000)); B = A-round(A); find(abs(B) < 1/1000)
ans = 1x0 empty double row vector
이번에는 A
의 요소의 소수부가 보다 균일하게 분포되어 있는 것을 알 수 있습니다.
histogram(double(B), 50)