Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

고정밀도의 수치 계산

이 예제에서는 Symbolic Math Toolbox™에서 가변 정밀도 연산방식을 사용하여 고정밀도 계산 결과를 구하는 방법을 보여줍니다.

근사 정수를 표현하는 식을 찾습니다. 고전적인 예는 다음과 같습니다. exp(163π)를 30자리까지 계산해 봅니다. 결과는 반올림 오차가 있는 상태로 표시된 정수로 보입니다.

digits(30);
f = exp(sqrt(sym(163))*sym(pi));
vpa(f)
ans = 262537412640768743.999999999999

동일한 값을 40자리까지 계산해 봅니다. 이 값은 정수가 아님을 알 수 있습니다.

digits(40);
vpa(f)
ans = 262537412640768743.9999999999992500725972

이 현상을 더 조사합니다. 이하 코드에서는 최대 exp(1000)까지의 숫자가 발생하며 조사를 수행하려면 소수점 이하의 정확한 자릿수가 필요합니다. 필요한 작업 정밀도를 계산합니다.

d = log10(exp(vpa(1000)))
d = 434.2944819032518276511289189166050822944

정밀도에 따라 값이 달라지는 함수를 처음 호출하기 전에 필요한 정밀도를 설정합니다. 특히 round, vpadouble이 그러한 함수입니다.

digits(ceil(d) + 50);

exp(nπ) 형식의 유사한 예를 찾습니다. 물론 163에 어떤 수의 제곱을 곱하면 그러한 숫자 n을 더 많이 얻을 수 있습니다. 그러나 그 외에도 이 형식의 더 많은 숫자가 정수에 가깝습니다. 소수부에 대한 히스토그램 플롯에서 이를 확인할 수 있습니다.

A = exp(pi*sqrt(vpa(1:1000)));
B = A-round(A);
histogram(double(B), 50)

Figure contains an axes object. The axes object contains an object of type histogram.

exp(n) 형식에 대한 근사 정수가 있는지 계산해 봅니다.

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)

Figure contains an axes object. The axes object contains an object of type histogram.