This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Numerical Computations With High Precision

This example shows how to use variable-precision arithmetic to obtain high precision computations using Symbolic Math Toolbox™.

Search for formulas that represent near-integers. A classic example is the following: compute to 30 digits. The result appears to be an integer that is displayed with a rounding error.

f = exp(sqrt(sym(163))*sym(pi));
ans = 

Compute the same value to 40 digits. It turns out that this is not an integer.

ans = 

Investigate this phenomenon further. Below, numbers up to occur, and the investigation needs some correct digits after the decimal point. Compute the required working precision:

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

Set the required precision before the first call to a function that depends on it. Among others, round, vpa, and double are such functions.

digits(ceil(d) + 50);

Look for similar examples of the form . Of course, you can obtain more such numbers n by multiplying 163 by a square. But apart from that, many more numbers of this form are close to some integer. You can see this from a histogram plot of their fractional parts:

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

Calculate if there are near-integers of the form .

A = exp(vpa(1:1000));
B = A-round(A);
find(abs(B) < 1/1000)
ans =

  1x0 empty double row vector

It turns out that this time the fractional parts of the elements of A are rather evenly distributed.

histogram(double(B), 50)