PascalABC.NET
January 10, 2023
Как вычисляется Exp(a)
Элементарные функции в стандартной библиотеке вычисляются как правило с помощью разложения в ряд Тейлора. На скриншоте приведен ряд Тейлора для вычисления Exp(a).
Берется n членов ряда. Число n выбирается так чтобы следующий член ряда был сравним с машинной точностью.
Ниже приводится полная программа для вычисления Exp(2):
begin var a := 2.0; // exp(2.0) var n := 22; var x := 1.0; var s := x; for var i := 1 to n do begin x := x * a / i; s += x; Println(#39;{i,2} {s,17:f14} {abs(s - exp(a)),0:E1}'); end; end.
1 3.00000000000000 4.4E+000 2 5.00000000000000 2.4E+000 3 6.33333333333333 1.1E+000 4 7.00000000000000 3.9E-001 5 7.26666666666667 1.2E-001 6 7.35555555555556 3.4E-002 7 7.38095238095238 8.1E-003 8 7.38730158730159 1.8E-003 9 7.38871252204585 3.4E-004 10 7.38899470899471 6.1E-005 11 7.38904601571268 1.0E-005 12 7.38905456683234 1.5E-006 13 7.38905588238921 2.2E-007 14 7.38905607032591 2.9E-008 15 7.38905609538414 3.5E-009 16 7.38905609851641 4.1E-010 17 7.38905609888492 4.6E-011 18 7.38905609892586 4.8E-012 19 7.38905609893017 4.8E-013 20 7.38905609893060 4.6E-014 21 7.38905609893065 5.3E-015 22 7.38905609893065 1.8E-015
Таким образом, для достижения машинной точности 1e-15 требуется n=22 члена ряда или в операциях: 22 сложения, 22 умножения и 22 деления, 44 присваивания.
Заключение
Вычисление стандартных функций - весьма дорогостоящее. Но ускорить эти алгоритмы нельзя.