Квант

20

Не беда, что нет функций

А. И. ПРИВЕНЬ

— Папа, ты знаешь, Маше Сидоровой родители купили новеньку «Электронку БЗ-36» с функциями. И у других ребят она есть…
— А что, твой «Электронка БЗ-30» плохо работает?
— Работать-то она работает, но на ней же нет функций: только арифметические действия делает, и корни изображает. А у нас в девятом классе всё снусы и косинусы, логарифмы, показательные функции. Не носить же мне всюду с собой таблицы Брадиса!
— Не беда, что нет функций. Ты же у нас математиком хочет быть, значит сообщать должа. Ряд Тейлора на крупке вам расссказывали? Ну тогда слушай…

Как соччитать логарифм

Сначала немного теории. Ты, конечно, знаешь, что

lim⁡x→0(1+x)1/x=e.\lim_{x \to 0} (1+x)^{1/x} = e.

Это равенство с достаточно точностью выполняется, если xx близко к 0. Тогда получаем (1+x)1/x≈e(1+x)^{1/x} \approx e, или 1+x≈ex1+x \approx e^x, откуда

ln⁡(1+x)≈x,\ln(1+x) \approx x,

(1) то есть, отпав от числа единицу, получим его натуральный логарифм. А как быть с большими числами?
Довольно просто. Ведь

ln⁡a=ln⁡(aN/N)=Nln⁡(a1/N).\ln a = \ln (a^{N/N}) = N \ln (a^{1/N}).

Если NN достаточно велико (о конкретных значениях поговорим позже), то a1/N≈1a^{1/N} \approx 1 и ln⁡(a1/N)≈a1/N−1\ln (a^{1/N}) \approx a^{1/N} - 1.

На машине a1/Na^{1/N} вычисляется легко, если N=2nN=2^n — достаточно лишь nn раз нажать на клавишу \sqrt{}. А затем для нахождения исходного логарифма нужно вычесть единицу и умножить на соответствующее двойки:

ln⁡a=ln⁡aN/N=Nln⁡a1/N≈(a1/N−1)⋅N.\ln a = \ln a^{N/N} = N \ln a^{1/N} \approx (a^{1/N} - 1) \cdot N.

Осталось лишь найти оптимальное значение NN. Из равенства (1) вытекает

ln⁡(1+x)1/2=12ln⁡(1+x)≈12x≈ln⁡(1+12x),\ln (1+x)^{1/2} = \frac{1}{2} \ln (1+x) \approx \frac{1}{2} x \approx \ln \left(1 + \frac{1}{2} x\right),

то есть

(1+x)1/2=1+x≈1+12x.\left(1+x\right)^{1/2} = \sqrt{1+x} \approx 1 + \frac{1}{2} x.

Что бы оценить точность этого равенства, воспользоваться формулой Тейлора*. Нам достаточно трех первых членов:

f(a+x)=f(a)+xf′(a)+x22!f′′(a)+…f(a+x) = f(a) + xf'(a) + \frac{x^2}{2!} f''(a) + \dots

В нашем случае a=1a=1; f(a+x)=1+xf(a+x) = \sqrt{1+x};

f(a)=a=1;f′(a)=12a=12;f(a) = \sqrt{a} = 1; f'(a) = \frac{1}{2\sqrt{a}} = \frac{1}{2};

f′′(a)=−14a3/2=−14,f''(a) = -\frac{1}{4a^{3/2}} = -\frac{1}{4},

то есть 1+x≈1+x2−x28\sqrt{1+x} \approx 1 + \frac{x}{2} - \frac{x^2}{8};

остальные члены при x→0x \to 0 можно отбросить.

Таким образом, погрешность формулы (3) примерно равна x2/8x^2/8. Зададимся величины погрешности Δ=5⋅10−9\Delta = 5 \cdot 10^{-9}. Это наиболее величины, которые не сказываются на показании 8-разрядного калькулятора.

Далее просто: Δ=x28=5⋅10−9\Delta = \frac{x^2}{8} = 5 \cdot 10^{-9}, x=2⋅10−4x=2 \cdot 10^{-4}. Это значение xx должно обеспечить минимум погрешности. Так, значение ln2ln 2, вычисленное по формуле ln⁡2=212(21/212−1)=4096×0.0001691\ln 2 = 2^{12} (2^{1/2^12} - 1) = 4096 \times 0.0001691, равно 0,693207 вместе табличного 0,693147.

Однако тутсказывается один чисто «машинный» эффект: извлечение корня (как и другие вычисления) проводится с недостатком в последнем знаке, и эта ошибка с каждым разом увеличивается. В конце концов она перекрывает величины x28\frac{x^2}{8}, и формула для Δ\Delta становится непримемой. Этот эффект заменено сказывается при n>10n > 10, где n=log⁡2Nn = \log_2 N — число извлечений корня. В результате тот же ln⁡2\ln 2, вычисленный по той же формуле на микрокалькуляторе БЗ-30, равен 0,69263… По-

*) О формуле Тейлора см. статью В. Р. Почуева в предыдущем номере «Квана».

21

этому в случае n>10n > 10 целесообразно принять x=(3,5÷7)⋅10−4x = (3,5 \div 7) \cdot 10^{-4}.

Тот же ln 2, вычисленный на той же машине при n=11n = 11, равен 0,69304 с относительной ошибкой 0,014 %.

Итак, мы нашли алгоритм вычисления ln aa:

ln⁡a=ln⁡aln⁡10=ln⁡a2,303.\ln a = \frac{\ln a}{\ln 10} = \frac{\ln a}{2,303}.

Для 2<a<102 < a < 10 достаточно точные результаты дает выражение

lg⁡a≈(a2/10−1)⋅445,\lg a \approx (a^{2/10} - 1) \cdot 445,

где 445≈210ln⁡10445 \approx \frac{2^{10}}{\ln 10}.

Как считать показательную функцию

Для вычисления функции exe^x преобразуем выражение, полученное для ln aa. Мы имеем ln a≈N(a1/N−1)a \approx N (a^{1/N} - 1), при большом NN, значит,

a≈(ln⁡aN+1)N.a \approx \left( \frac{\ln a}{N} + 1 \right)^N.

Сделав замену x=ln⁡ax = \ln a, получим a=exa = e^x и поэтому

ex≈(xN+1)N=(xN+1)2n.e^x \approx \left( \frac{x}{N} + 1 \right)^N = \left( \frac{x}{N} + 1 \right)^{2n}.

Чтобы быстро пользоваться этим соответствием на простейшем калькуляторе, желательно превращать его в целочичный алгоритм, то есть такой алгоритм, при котором не нужно записьать промежуточные результаты. Для этого возведение в степень NN (или nn раз в квадрат) и нужно выполнять, повторяя последовательность команд ×=\times = для модели B3-30 или

⋯×1×=…,\dots \times 1 \times = \dots ,

для модели типа B3-14. При этом результат все время остается во «временной памяти» калькулятора, и поэтому не нужно вновь вводить в машину после каждойтерации. Таким образом, алгоритм нахождения exe^x выглядит так (ниже nn — это натуральное число, притом N=2nN = 2^n):

x:2n+1×=x : 2^n + 1 \times =

Вычисление функции 10xn10^{xn} отличается лишь тем, что после набора 2n2^n результат умножается на ln 10≈2,30310 \approx 2,303.

Осталась функция xyx^y. Продолжарифмируем ее:

ln⁡(xy)=yln⁡x=Nyln⁡(x1/N)≈Ny(x1/N−1).\ln (x^y) = y \ln x = Ny \ln (x^{1/N}) \approx Ny (x^{1/N} - 1).

Отсюда по формуле (4)

xy=eln⁡(xy)≈eNy(x1/N−1)≈[Ny(x1/N−1)N+1]N=[y(x1/N−1)+1]N.x^y = e^{\ln (x^y)} \approx e^{Ny (x^{1/N} - 1)} \approx \left[ \frac{Ny (x^{1/N} - 1)}{N} + 1 \right]^N = [y (x^{1/N} - 1) + 1]^N.

Формула (5) представляется программой:

Как считать тригонометрическе функции

Здесь формула Тейлора дает два удобных выражения для синуса и косиуса

sin⁡x≈x−x36=(x2−6)x6;\sin x \approx x - \frac{x^3}{6} = \frac{(x^2 - 6)x}{6};

cos⁡x≈1−x22+x424=1+(x2−12)x224.\cos x \approx 1 - \frac{x^2}{2} + \frac{x^4}{24} = 1 + \frac{(x^2 - 12)x^2}{24}.

Первое выполняется достаточно при x≤π4x \leq \frac{\pi}{4}; то же можно сказать и о втором. Величина x424\frac{x^4}{24} начинает заметно сказаться при x≥π6x \geq \frac{\pi}{6}, при x<π6x < \frac{\pi}{6} можно упростить формулу для cos xx, отбросив третьей член:

cos⁡x≈1−x22.\cos x \approx 1 - \frac{x^2}{2}.

Ограничение x≤π4x \leq \frac{\pi}{4} не опасно, так как тригонометрические функции всегда можно привести к аргументу, меньше π4\frac{\pi}{4}.


Как видить, совсем немного математики — и простейший микрокалькулятор становится приготовным для вычисления практических всех «школьных» функций.