Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Описание функций модуля Math

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

  • ArcCos - Арккосинус
  • ArcCosh - Пиперболический арккосинус
  • ArcSIn - Арксинус
  • ArcSInh - Гиперболический арксинус
  • ArcTahn - Гиперболический арктангенс
  • ArcTan2 - Арктангенс с учетом квадранта (функция ArcTan, не учитывающая квадрант, находится в модуле System)
  • Cosh - Гиперболический косинус
  • Cotan - Котангенс
  • CycleToRad - Преобразование циклов в радианы
  • DegToRad - Преобразование градусов в радианы
  • GradToRad - Преобразование градов в радианы
  • Hypot - Вычисление гипотенузы прямоугольного треугольника по длинам катетов
  • RadToCycle - Преобразование радианов в циклы
  • RadToDeg - Преобразование радианов в градусы
  • RacIToGrad - Преобразование радианов в грады
  • SinCos - Вычисление синуса и косинуса угла. Как и в случае SumAndSquares и MeanAndStdDev, одновременная генерация обеих величин происходит быстрее
  • Sinh - Гиперболический синус
  • Tan - Тангенс
  • Tanh - Гиперболический тангенс

Арифметические функции и процедуры

  • Cell - Округление вверх
  • Floor - Округление вниз
  • Frexp - Вычисление мантиссы и порядка заданной величины
  • IntPower - Возведение числа в целую степень. Если вы не собираетесь пользоваться экспонентами с плавающей точкой, желательно использовать эту функцию из-за ее скорости
  • Ldexp - Умножение Х на 2 в заданной степени
  • LnXPI - Вычисление натурального логарифма Х+1. Рекомендуется для X, близких к нулю
  • LogN - Вычисление логарифма Х по основанию N
  • LogIO - Вычисление десятичного логарифмах
  • Log2 - Вычисление двоичного логарифмах
  • Power - Возведение числа в степень. Работает медленнее IntPower, но для операций с плавающей точкой вполне приемлемо

Финансовые функции и процедуры

  • DoubleDecliningBalance - Вычисление амортизации методом двойного баланса

function DoubleDecliningBalance(Cost, Salvage: Extended; Life, Period: Integer): Extended;

Функция вычисляет амортизационные отчисления на определенном этапе. В качестве параметров используются: начальная стоимость Cost, срок службы Life, конечная стоимость Salvage и амортизационный период Period. Вычисления производятся по следующим формулам:

Период Сумма амортизационных отчислений
1 А1:= Cost*2/Life
2 А2:= (Cost-А1)*2/Life
3 А3:= (Cost-А1-А2)*2/Life
... ...
n Аn:= (Cost-А1-А2 - ... - Аn-1)*2/Life
где n=Period
 

При достижении конечной стоимости, амортизация перестает начисляться, и для последующих периодов функция будет возвращать значение, указанное в параметре Salvage.

Пример:


var
  A: Extended;
begin
  A := DoubleDecliningBalance(1000, 100, 5, 1); { A:=400 }
end;

  • FutureValue - Будущее значение вложения

function FutureValue(Rate: Extended; NPeriods: Integer;
Payment, PresentValue: Extended; PaymentTime: TPaymentTime ): Extended;

Функция вычисляет значение вклада по прошествии определенного периода времени.

  • NPeriods - количество прошедших единиц периода времени. Например, если проценты начисляются раз в год, то данный параметр определяет количество лет.
  • PresentValue - первоначальная сумма вклада.
  • В параметре Payment указывается сумма, которая будет добавляться вкладчиком ко вкладу в течение каждой единицы периода времени. Если вклад осуществляется только один раз, то Payment:=0.
  • Rate - дивиденты, начисляемые за единицу периода.
  • Параметр PaymentTime определяет, как должны начисляться проценты:
PtStartOfPeriod
Проценты начисляются в конце единицы периода времени на всю сумму, находящуюся на момент начисления на счету.
ptEndOfPeriod
Проценты начисляются только на сумму, которая находилась на счету в начале единицы периода времени. Т.е. на сумму, которая была добавлена вкладчиком к вкладу в течение последней единицы времени, проценты будут начислены по прошествии следующего периода.

Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.

Пример:

Первоначальный вклад составил 100 руб. дивиденды - 10% годовых. Ежегодно вкладчик добавляет к вкладу 50 руб. Проценты начисляются в конце года только на сумму, которая находилась на счету в начале года, т.е. проценты на сумму, которая была добавлена к вкладу в течение года будут начислены только в конце следующего года. Вычисляем сумму вклада через 5 лет.


var
  Sum: Extended;
begin
  Sum := FutureValue(0.1, 5, 50, 100, ptEndOfPeriod);
  { Sum:= -466.306 }
end;

  • InterestPayment - Вычисление процентов по ссуде

function InterestPayment(Rate: Extended; NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

Функция вычисляет процентную ставку кредита на определенном этапе в денежном исчислении.

  • PresentValue - сумма кредита.
  • Rate - фиксированная процентная ставка кредита.
  • NPeriods - число этапов, в течение которых производятся выплаты.
  • Period - номер этапа выплат, для которого производятся вычисления.
  • FutureValue - значение суммы кредита, по истечении выплат.
  • Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в конце (ptEndOfPeriod).

Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.

Пример:


var
  Pay: Extended;
begin
  Pay := InterestPayment(0.1, 1, 5, 1000, 0, PtStartOfPeriod);
  { Pay:= -90.9090909090909 }
end;

  • InterestRate - Норма прибыли, необходимая для получения заданной суммы

function InterestRate(NPeriods: Integer; Payment, PresentValue,
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

Функция вычисляет процентную ставку инвестиций, необходимую для возврата суммы инвестиций PresentValue с дивидендами.

  • PresentValue - сумма инвестиций.
  • FutureValue - полная сумма, полученная от инвестиций. Включает возврат первоначальной суммы инвестиций и дивиденды.
  • NPeriods - количество этапов выплат.
  • Payment - сумма периодических выплат.
  • Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).

Пример:


var
  IRate: Extended;
begin
  IRate := InterestRate(1, -100, -1000, 1500, ptEndOfPeriod);
  { IRate:= 0.4 }
end;

  • InternalRateOfReturn - Вычисление внутренней скорости оборота вложения для ряда последовательных выплат

function InternalRateOfReturn(Guess: Extended; 
const CashFlows: array of Double): Extended;

Функция вычисляет внутреннюю процентную ставку дохода от инвестиций. Массив CashFlows состоит из значений инвестиций и значений получаемого дохода за определенные периоды времени. Первое значение массива должно быть отрицательным, так как оно опредеяет первоначальную сумму инвестиций. Последующие значения могут быть отрицательными (дополнительные инвестиции), положительными (получаемый доход) или равны 0.

Пример:


var
  IRate: Extended;
  CashFlows: array of Double;
begin
  SetLength(CashFlow, 2);
  CashFlow[0]:=-1000;
  CashFlow[1]:= 1200;
  IRate:= InternalRateOfReturn(0, CashFlow);
  { IRate:= 0.4 }
end;

  • NetPresentValue - Вычисление чистой текущей стоимости вложения для ряда последовательных выплат с учетом процентной ставки

function NetPresentValue(Rate: Extended; const CashFlows: array of Double; 
PaymentTime: TPaymentTime): Extended;

Функция вычисляет значение текущего платежа, используя массив с расчетными значениями. Данная функция помогает определить расчетную стоимость инвестиций на основе предполагаемого (расчетного) дохода.

  • Параметр Rate - определяет процентную ставку инвестиций.
  • CashFlows - массив расчетных значений текущих платежей.
  • Параметр PaymentTime указывает, происходят выплаты в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного этапа.

Пример


var
  PayValue: Extended;
  CashFlows: array of Double;
begin
  SetLength(CashFlow, 3);
  CashFlow[0]:=-100;
  CashFlow[1]:= 110;
  CashFlow[2]:= 121;
  PayValue:= NetPresentValue (0.1, CashFlow, PtStartOfPeriod);
  { PayValue:= 100 }
end;

  • NumberOf Periods - Количество периодов, за которое вложение достигнет заданной величины

function NumberOfPeriods(Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime): Extended;

Функция определяет количество этапов, необходимых для погашения кредита до значения определенного в параметре FutureValue.

  • PresentValue - первоначальная сумма кредита.
  • Rate - процентная ставка.
  • Payment - величина регулярных выплат.
  • Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).

Пример:

Первоначальная сумма кредита составляет 364руб. Процентная ставка 20%. Регулярные ежемесячные выплаты по 100руб производятся в конце месяца. Рассчитаем сколько месяцев необходимо для полной выплаты кредита.


var
  Np: Extended;
begin
  Np := NumberOfPeriods (0.2, 100, 364, 0, ptEndOfPeriod);
  { Np:= -3 }
end;

  • Payment - Размер периодической выплаты, необходимой для погашения ссуды, при заданном числе периодов, процентной ставке, а также текущем и будущем значениях ссуды

function Payment(Rate: Extended; NPeriods: Integer; PresentValue, 
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

Функция вычисляет общую сумму погашения кредита, выплачиваемую на каждом этапе (состоит из текущих выплат и процентов).

  • PresentValue - сумма заимствования.
  • NPeriods - срок выплаты кредита. Данный пармаметр указывается количество этапов выплаты (количество лет, кварталов, месяцев и т.д.).
  • FutureValue - оставшаяся сумма кредита по истечении указанного периода.
  • Rate - величина процентной ставки кредита (ежегодная, ежеквартальная, ежемесячная и т.д. в соответствии с единицей измерения периода времени).
  • Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.

Пример:


var
  PaySum: Extended;
begin
  PaySum := Payment(0.2, 1, 100, 0, ptEndOfPeriod);
  { PaySum:=-120 }
end;

  • PeriodPayment - Платежи по процентам за заданный период

function PeriodPayment(Rate: Extended; Period, NPeriods: Integer; 
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

Функция вычисляет сумму выплат основной части кредита (без учета процентов) на определенном этапе.

  • PresentValue - сумма заимствований.
  • NPeriods - срок выплаты кредита (количество этапов).
  • FutureValue - сумма кредита по прошествии указанного срока.
  • Period - номер этапа, для которого производятся вычисления.
  • Rate - процентная ставка кредита.
  • Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.

Сумму выплачиваемых процентов кредита можно вычислить с помощью функции InterestPayment.

Пример:


var
  PaySum: Extended;
begin
  PaySum := PeriodPayment(0.1, 2, 5, 1000, 0, ptEndOfPeriod);
  { PaySum:= -180.17722887422 }
end;

  • PresentValue - Текущее значение вложения

function PresentValue(Rate: Extended; NPeriods: Integer; Payment, FutureValue: Extended; 
PaymentTime: TPaymentTime): Extended;

Функция определяет значение вклада в указанный период времени.

  • Payment - первоначальная сумма вклада.
  • NPeriods - срок вклада.
  • Rate - процентная ставка.
  • FutureValue - значение, которого могут достигнуть инвестиции в определенный период.
  • Параметр PaymentTime указывает, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.

Пример:


var
  Value: Extended;
begin
  Value := PresentValue(0.1, 1, -100, 0, ptEndOfPeriod);
  { Value:= 90,9090909090909 }
end;

  • SLNDepreclatlon - Вычисление амортизации методом постоянной нормы

function SLNDepreciation(Cost, Salvage: Extended; Life: Integer): Extended;

Функция вычисляет сумму амортизационных отчислений за единицу периода времени по методу линейной (равномерной) амортизации.

  • Cost - первоначальную стоимость оборудования.
  • Salvage - конечная стоимость оборудования.
  • Life - срок эксплуатации.

Для вычисления амортизации по ускоренному методу используйте функцию SYDDepreciation.

Пример:


var
  Amort: Extended;
begin
  Amort := SLNDepreciation(1000, 200, 5); 
  { Amort:= 160 }
end;

  • SYDepreclatlon - Вычисление амортизации методом весовых коэффициентов

function SYDDepreciation(Cost, Salvage: Extended; Life, Period: Integer): Extended;

Функция вычисляет сумму амортизационных отчислений на заданном этапе по методу ускоренной амортизации.

  • Cost - первоначальная стоимость оборудования.
  • Salvage - конечная стоимость.
  • Life - срок эксплуатации.
  • Period - номер этапа, для которого определяется сумма амортизационных отчислений.

Для вычислений по методу равномерной амортизации используйте функцию SLNDepreciation.

Пример:


var
  Amort: Extended;
begin
  Amort := SYDDepreciation(1000, 100, 5, 1);
  {Amort:=300}
end;

Статистические функции и процедуры

  • MaxIntValue - Максимальное значение в наборе целых чисел. Функция появилась в Delphi 3. ее не существует в Delphi 2
  • MaxValue - Максимальное значение в наборе чисел. В Delphi 2 функция возвращает минималъное значение
  • Mean - Среднее арифметическое для набора чисел
  • MeanAndStdDev - Одновременное вычисление среднего арифметического и стандартного отклонения для набора чисел. Вычисляется быстрее, чем обе величины по отдельности
  • MinIntValLie - Минимальное значение в наборе целых чисел. Функция появилась в Delphi 3, ее не существует в Delphi 2
  • MInValue - Минимальное значение в наборе чисел. В Delphi 2 функция возвращает максимальное значение
  • MoiiientSkewKurtosIs - Статистические моменты порядков с первого по четвертый, а также асимметрия (skew) и эксцесс (kurtosis) для набора чисел
  • Norm - Норма для набора данных (квадратный корень из суммы квадратов)
  • PopnStdDev - Выборочное стандартное отклонение. Отличается от обычного стандартного отклонения тем, что при вычислениях используется выборочное значение дисперсии, PopnVarl апсе (см. ниже)
  • PopnVarlance - Выборочная дисперсия. Использует "смещенную" формулу TotalVanance/n
  • RandG - Генерация нормально распределенных случайных чисел с заданным средним значением и среднеквадратическим отклонением
  • StdDev - Среднеквадратическое отклонение для набора чисел
  • Sum - Сумма набора чисел
  • SLimsAndSquares - Одновременное вычисление суммы и суммы квадратов для набора чисел. Как и в других функциях модуля Math, обе величины вычисляются быстрее, чем по отдельности
  • Sumint - Сумма набора целых чисел. Функция появилась в Delphi 3, ее не существует в Delphi 2
  • SLimOfSquares - Сумма квадратов набора чисел
  • Total Variance - "Полная дисперсия" для набора чисел. Это сумма квадратов расстояний всех величин от их среднего арифметического
  • Variance - Выборочная дисперсия для набора чисел. Функция использует "несмещенную" формулу TotalVanапсе/(п -1)
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay