Этот пример показывает, как использовать арифметику переменной точности, чтобы получить вычисления высокой точности с помощью 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);
Ищите подобные примеры формы . Конечно, можно получить больше таких чисел n путем умножения 163 квадратом. Но кроме этого, намного больше чисел этой формы близко к некоторому целому числу. Вы видите это из графика гистограммы их дробных частей:
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)