The Stone-Weierstass theorem in its simplest form asserts that every continuous function defined on a closed interval [a,b] can be uniformly approximated as closely as desired by a polynomial function. Let us consider a concrete function (say, arcsin(sqrt(x))) on a concrete interval (for example,[0,1]) and a concrete rate (for instance, 0.01). The question arises: what can be the degree of an approximating polynomial?

Looking in the constructive proof of the Weierstrass theorem (for example, see

W. Rudin, Principles of mathematical analysis. Third Ed. McGraw-Hill Inc. New York-...-Toronto. 1976, pp. 159-160 SWT.docx), we find the inequality for degree n in terms of the modulus of the continuity delta and the maximum of the modulus M of a function f on [0,1]: 4*M*sqrt(n)*(1-delta^2)^n < epsilon/2.

Next, we find the modulus of the continuity of arcsin(sqrt(x)) with help of Maple (namely, the DirectSearch package):

>restart;

>CM := proc (delta) DirectSearch:-Search(abs(arcsin((x+delta)^(1/2))-arcsin(x^(1/2))),

{0 <= x, 0 <= x+delta, x <= 1, x+delta <= 1}, maximize)

end proc

. Now delta is fitting to satisfy CM(delta) < 0.01:

>Digits := 15: CM(0.9999640e-4);

[0.999995686126010e-2, [x = .999900003599999], 18].

At last, we find the required degree, taking into account M=Pi/2 for arcsin(sqrt(x)) on [0,1]:

>DirectSearch:-SolveEquations((4*Pi*(1/2))*sqrt(n)*(1-0.9999640e-4^2)^n = (1/2)*10^(-2), {n >= 10^9}, tolerances = 10^(-8));

[3.68635028417869*10^(-35), Vector(1, {(1) = -0.607153216591882e-17}),[n = 1.77870508105403*10^9], 74]

The obtained result is unexpected and impressive. However, this is only an estimate of the degree for the chosen construction. There are different ways to construct an approximating polynomial. For example, let us take the interpolating polynomial.

>with(CurveFitting): Digits := 200: P := PolynomialInterpolation([seq([(1/200)*j,

evalf(arcsin(sqrt((1/200)*j)), 180)], j = 0 .. 200)], x);

8.57260524574724504043891781488113281218267308627010084942700641\

2116721658995225354525109649870447266086431479184935898860221001\

6810627259201248204607733508370522655937863029427984169024474693\

605019813*10^(-24)*x^200+

3.4102471291087052576144785068387656673244314487588\

37173451046570851636655790486463697061695256004409457030\

661587523327337363549630285194598139656219506035056874382\

5412929520214254752642899246978334986*10^83*x^199+...

The whole long output of sort(P) can be seen in the attached file.

>DirectSearch:-Search(abs(arcsin(sqrt(x))-P), {x >= 0, x <= 1}, maximize, tolerances = 10^(-10));

[0.7028873160870935332477114389520278374486329450431055674880288416078\

033259753063018233397798614e-2, [x = .999760629733897552108099038488344\

76319065496787157065017717228830101\

791752323133523143936216508553686883680060439608736578363\

678796478147136266075441732651036025656505033942652374763794644368578081487], 22]

See SWtheorem.mw