System/Docu/ru/Math.odc

Math

DEFINITION Math;

	PROCEDURE Pi (): REAL;
	PROCEDURE Eps (): REAL;

	PROCEDURE Sqrt (x: REAL): REAL;
	PROCEDURE Exp (x: REAL): REAL;
	PROCEDURE Ln (x: REAL): REAL;
	PROCEDURE Log (x: REAL): REAL;
	PROCEDURE Power (x, y: REAL): REAL;
	PROCEDURE IntPower (x: REAL; n: INTEGER): REAL;

	PROCEDURE Sin (x: REAL): REAL;
	PROCEDURE Cos (x: REAL): REAL;
	PROCEDURE Tan (x: REAL): REAL;
	PROCEDURE ArcSin (x: REAL): REAL;
	PROCEDURE ArcCos (x: REAL): REAL;
	PROCEDURE ArcTan (x: REAL): REAL;
	PROCEDURE ArcTan2 (y, x: REAL): REAL;

	PROCEDURE Sinh (x: REAL): REAL;
	PROCEDURE Cosh (x: REAL): REAL;
	PROCEDURE Tanh (x: REAL): REAL;
	PROCEDURE ArcSinh (x: REAL): REAL;
	PROCEDURE ArcCosh (x: REAL): REAL;
	PROCEDURE ArcTanh (x: REAL): REAL;

	PROCEDURE Sign (x: REAL): REAL;
	PROCEDURE Floor (x: REAL): REAL;
	PROCEDURE Ceiling (x: REAL): REAL;
	PROCEDURE Trunc (x: REAL): REAL;
	PROCEDURE Frac (x: REAL): REAL;
	PROCEDURE Round (x: REAL): REAL;

	PROCEDURE Mantissa (x: REAL): REAL;
	PROCEDURE Exponent (x: REAL): INTEGER;
	PROCEDURE Real (m: REAL; e: INTEGER): REAL;
		
END Math.


Модуль Math представляет собой базовую библиотеку для численных расчетов. Он содержит наиболее часто используемые функции и константы. Для некоторых дополнительных функций ниже приводится их представление в терминах функций модуля Math.


Константы

PROCEDURE Pi (): REAL
Возвращает приближенное значение числа pi.

Постусловие
result = 3.141592...

PROCEDURE Eps (): REAL
Возвращает машинный эпсилон для REAL. Машинный эпсилон eps - это такое наименьшее число с плавающей точкой, что сумма 1.0 + eps может быть точно представлена в переменной REAL. Обычно машинный эпсилон равен 2-m, где m - это количество разрядов, используемое для представления мантиссы чисел с плавающей точкой. Отметим, что Eps() не обязательно наименьшее число с плавающей точкой, обладающее свойством, что его сумма с 1.0 больше, чем 1.0, и отметим также, что большинство математических сопроцессоров имеют верхнюю внутреннюю точность, которая может быть достигнута с переменными REAL.


Степени и логарифмы

PROCEDURE Sqrt (x: REAL): REAL
Возвращает квадратный корень из x.

Предусловие
x >= 0.0	20

Постусловие
result >= 0.0
x = INF
	result = INF

PROCEDURE Exp (x: REAL): REAL
Возвращает ex.

Постусловие
result > 0.0
x = INF
	result = INF
x = -INF
	result = 0.0

PROCEDURE Ln (x: REAL): REAL
Возвращает натуральный логарифм для x.

Предусловие
x >= 0.0	20

Постусловие
x = 0.0
	result = -INF
x = INF
	result = INF

PROCEDURE Log (x: REAL): REAL
Возвращает логарифм по основанию 10 для x.

Предусловие
x >= 0.0

Постусловие
x = 0.0
	result = -INF
x = INF
	result = INF

PROCEDURE Power (x, y: REAL): REAL
Возвращает xy. 

Предусловие
x >= 0.0	20
x # 0.0  OR  y # 0.0	21
x # INF  OR  y # 0.0	22
x # 1.0  OR  ABS(y) # INF	23

Постусловие
x = 0.0  &  y < 0.0
	result = INF
x = 0.0  &  y > 0.0
	result = 0.0
x = INF  &  y > 0.0
	result = INF
x = INF  &  y < 0.0
	result = 0.0
x > 1.0  &  y = INF
	result = INF
x > 1.0  &  y = -INF
	result = 0.0
x < 1.0  &  y = INF
	result = 0.0
x < 1.0  &  y = -INF
	result = INF

PROCEDURE IntPower (x: REAL; n: INTEGER): REAL
Возвращает xn. Процедура оптимизирована для целых значений n. IntPower(0, 0) дает 1. Если результат слишком велик, возвращается INF.


Тригонометрические и гиперболические функции

Аргументы всех тригонометрических и гиперболических функций должны задаваться в радианах, и обратные тригонометрические и гиперболические функции расчитываются в радианах (1 рад = 180/pi градусов). В конце этой секции приведена таблица преобразований для расширенных тригонометрических и гиперболических функций, которые не вошли в модуль Math, поскольку могут быть легко записаны в терминах основных функций.

PROCEDURE Sin (x: REAL): REAL
Возвращает синус x.

Предусловие
ABS(x) # INF	20

Постусловие
-1.0 <= result <= 1.0

PROCEDURE Cos (x: REAL): REAL
Возвращает косинус x.

Предусловие
ABS(x) # INF	20

Постусловие
-1.0 <= result <= 1.0

PROCEDURE Tan (x: REAL): REAL
Возвращает тангенс x. Tan может быть расчитан для всех возможных аргументов REAL, за исключением INF.

Предусловие
ABS(x) # INF	20

PROCEDURE ArcSin (x: REAL): REAL
Возвращает арксинус x.

Предусловие
-1.0 <= x <= 1.0	20

Постусловие
-pi/2.0 <= result <= pi/2.0

PROCEDURE ArcCos (x: REAL): REAL
Возвращает арккосинус x.

Предусловие
-1.0 <= x <= 1.0	20

Постусловие
0.0 <= result <= pi

PROCEDURE ArcTan (x: REAL): REAL
Возвращает арктангенс x.

Постусловие
-pi/2.0 <= result <= pi/2.0
x = INF
	result = pi/2.0
x = -INF
	result = -pi/2.0

PROCEDURE ArcTan2 (y, x: REAL): REAL
Возвращает квадрантно-корректное значение аргумента - комплексного числа x + iy из промежутка (-pi, pi].

Предусловие
y # 0  OR  x # 0	20
ABS(y) # INF  OR  ABS(x)  # INF	21

Постусловие
-pi < result <= pi
ABS(y) # INF  &  x = INF
	result = 0
y = INF  &  ABS(x) # INF
	result = pi/2.0
ABS(y) # INF  &  x = -INF
	result = pi
y = -INF  &  ABS(x) # INF
	result = -pi/2.0

PROCEDURE Sinh (x: REAL): REAL
Возвращает гиперболический синус x.

Постусловие
x = INF
	result = INF
x = -INF
	result = -INF

PROCEDURE Cosh (x: REAL): REAL
Возвращает гиперболический косинус x.

Постусловие
1.0 <= result
x = INF
	result = INF
x = -INF
	result = INF

PROCEDURE Tanh (x: REAL): REAL
Возвращает гиперболический тангенс x.

Постусловие
-1.0 <= result <= 1.0
x = INF
	result = 1.0
x = -INF
	result = -1.0

PROCEDURE ArcSinh (x: REAL): REAL;
Возвращает обратный гиперболический синус x.

Постусловие
x = INF
	result = INF
x = -INF
	result = -INF

PROCEDURE ArcCosh (x: REAL): REAL;
Возвращает обратный гиперболический косинус x.

Предусловие
1.0 <= x	20

Постусловие
0.0 <= result
x = INF
	result = INF

PROCEDURE ArcTanh (x: REAL): REAL;
Возвращает гиперболический тангенс x.

Предусловие
-1.0 <= x <= 1.0	20

Постусловие
x = 1.0
	result = INF
x = -1.0
	result = -INF

Ниже вы найдете определения расширенных тригонометрических и гиперболических функций в терминах основных функций. Их пред- и постусловия могут быть выведены из пред- и постусловий включенных функций.

		Cot (x) = 1.0 / Math.Tan(x)
		Csc (x) = 1.0 / Math.Sin(x)
		Sec (x) = 1.0 / Math.Cos(x)
		ArcCot (x) = Math.Pi() / 2.0 - Math.ArcTan(x)
		ArcCsc (x) = Math.ArcSin(1.0 / x)
		ArcSec (x) = Math.ArcCos(1.0 / x)

		Coth (x) = 1.0 / Math.Tanh(x)
		Csch (x) = 1.0 / Math.Sinh(x)
		Sech (x) = 1.0 / Math.Cosh(x)
		ArcCoth (x) = Math.ArcTanh(1.0 / x)
		ArcCsch (x) = Math.ArcSinh(1.0 / x)
		ArcSech (x) = Math.ArcCosh(1.0 / x)


Разные функции

Вы можете легко реализовать функции Sign, Floor, Ceiling, Trunc, Frac и Round самостоятельно, используя стандартную функцию ENTIER. Они предусмотрены здесь для удобства в версиях, которые возвращают результат типа REAL, так что не требуется никаких преобразований между действительными и целыми числами, если они используются в действительных выражениях.

PROCEDURE Sign (x: REAL): REAL
Возвращает знак x, то есть, 1.0, если x > 0.0, -1.0, если x < 0.0 и 0.0, если x = 0.0.

Постусловие
result IN {-1.0, 0.0, 1.0}

PROCEDURE Floor (x: REAL): REAL
Возвращает наибольшее целое, меньшее или равное x. Эта функция идентична ENTIER, но она возвращает значение типа REAL.

Постусловие
x = INF
	result = INF
x = -INF
	result = -INF

PROCEDURE Ceiling (x: REAL): REAL
Возвращает наименьшее целое, большее или равное x.

Постусловие
x = INF
	result = INF
x = -INF
	result = -INF

PROCEDURE Trunc (x: REAL): REAL
Trunc усекает свой аргумент до следующего целого, ближайшего к нулю.

Постусловие
x = INF
	result = INF
x = -INF
	result = -INF

PROCEDURE Frac (x: REAL): REAL
Frac возвращает дробную часть аргумента. Выполняется следующее равенство: x = Trunc(x) + Frac(x).

Предусловие
x # INF  &  x # -INF	20

PROCEDURE Round (x: REAL): REAL
Аналогично Floor(x + 0.5).

PROCEDURE Mantissa (x: REAL): REAL
Возвращает мантиссу x.

Постусловие
1.0 <= ABS(result) < 2.0  OR  result = 0.0
x = INF
	result = 1.0
x = -INF
	result = -1.0
x = not-a-number
	ABS(result) > 1.0

PROCEDURE Exponent (x: REAL): INTEGER
Возвращает экспоненту x такую, что x = Mantissa(x) * 2Exponent(x). Если x представляет INF или если x является not-a-number, то возвращается MAX(INTEGER).

PROCEDURE Real (m: REAL; e: INTEGER): REAL
Возвращает m * 2e. Если аргумент e равен MAX(INTEGER), то возвращается INF или not-a-number, причем INF возвращается, если m =  1.0 и not-a-number в противном случае.
Замечание: нормальные арифметические операции языка Компонентный Паскаль и другие операции, реализованные в модуле, никогда не порождают значение not-a-number стандарта IEEE.
Замечание: Real(0, 0) = 0.

Предусловие
(1.0 <= ABS(m) < 2.0)  OR  (m = 0.0)	20

Постусловие
m = 0.0
    result = 0.0