В некоторых задачах по программированию нужно произвести какие-нибудь вычисления, но при этом запрещают пользоваться тандартными математическими функциями. Однако, если не уточняется, что мы не можем написать их сами, нам ничего не мешает это сделать! Примеры некоторых я напишу на C. 1) Первая - это вычисление степени с вещественным основанием и целым положительным показателем ap. Есть много путей, но лучший пока - реккурентное умножение.
2) Вторая - вычисление факториала числа a!. Эта функция также реализована реккурентным умножением.
Первые две функции очень просты, третья сложнее. 3) Вычисление квадратного корня числа. Математика вычислений построена на том, что корнем числа a^0.5 является пределом последовательности {x(n)}, заданной реккурентным соотношением x(n+1)=0.5*(x(n)+ a/x(n)), x(1)=a. Для реализации рекуурсии функции ей аргументами передаются текущий x(n) и a. Третий аргумент - номер n, x(n) будет выдан как a^0.5, и n задает точность вычисления (обычно n=100 хватает за уши).
![Листинг 3]() Соответственно, a^0.5=SquRt(a, a, n). 4) Вычисление синуса угла в радианах. Эта функция раскладывает синус x (0<=x<2?) в ряд Тейлора: sin(x)=x + x^3/3! + x^5/5! + x^7/7!... Здесь будем использовать функции степени и факториала. Как аргументы функции передаются x и n, последний задает степень точности (количество слагаемых, для 6 знаков после запятой хватает n=10).
![Листинг 4]() Ну вот так и закрутились, не используя стандартные функции) |