PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 88


Решение

В Perl существуют лишь стандартные тригонометрические функции sin, cos и atan2. С их помощью можно вычислить тангенс (tan) и другие тригонометриче­ские функции:

sub tan {

my $theta = shift,

return sin($theta)/cos($theta), }

В модуле POSIX представлен расширенный набор тригонометрических функ­ций:

use POSIX,

$у = acos(3 7),

Модуль Math::Trig содержит полный набор тригонометрических функций, а также позволяет выполнять операции с комплексными аргументами (или дающие комплексный результат):

use Math Trig, $у = acos(3 7),

Комментарий

Если значение $theta равно л/2, Зп/2 и т. д., в функции tan возникает исключи­тельная ситуация деления на ноль, поскольку для этих углов косинус равен нулю. Аналогичные ошибки возникают и во многих функциях модуля Math::Trig. Что­бы перехватить их, воспользуйтесь конструкцией eval:


2.13. Вычисление логарифмов   83

eval {

$у = tan($pi/2), } or return undef,

t> Смотри также--------------------------------------------------------------------------------------------

Описание функций sin, cos и atan2 вperlfunc(l). Тригонометрия в контексте комплексных чисел рассматривается в рецепте 2.15, а использование eval для перехвата исключений — в рецепте 10.12.

2.13. Вычисление логарифмов

Проблема

Требуется вычислить логарифм по различным основаниям.

Решение

Для натуральных логарифмов (по основанию е) существует встроенная функ­ция log:

$log_e = log(VALUE),

Чтобы вычислить логарифм по основанию 10, воспользуйтесь функцией log 10 модуля POSIX:

use POSIX qw(log10), $log_10 = Iog10(VALUE),

Для других оснований следует использовать соотношение:

1одл(х) = 1одв(х)/1оде(п)

где х — число, логарифм которого вычисляется, п — нужное основание, а е — осно­вание натуральных логарифмов.

sub log_base {

my ($base,  $value) = @_, return log($value)/log($base),

Комментарий

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




Начало  Назад  Вперед



Книжный магазин