К основному контенту

Автомобили из Германии

Математические функции в PowerShell

Довольно часто при написании скриптов приходится использовать математические функции — подсчитать сумму, округлить результат и т.п. Конечно, базовые операции, такие как сложение, вычитание, умножение и деление, напрямую встроены в PowerShell и не требуют дополнительных действий.


базовые математические действия в PowerShell

А вот для более сложных математических операций придется задействовать статический класс [math]. В этот класс входит около 30 свойств и методов, с помощью которых можно производить различные математические действия. Для начала выведем эти методы командой:

[math] | Get-Member -Static


свойства и методы класса [math]

Ну а теперь рассмотрим их все по порядку.

Константы

Начнем с двух свойств, E и PI. Как вы наверное догадались, это математические константы. PI равно отношению длины окружности к длине её диаметра, E — основание натурального логарифма. Вывести их значение можно командой:

[math]::PI
[math]::E


константы P и E

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

Переходим к методам. Метод ::Pow(x,y) возводит число х в степень у, например:

[math]::Pow(3,2) возвращает 9

Метод ::Sqrt(x) вычисляет квадратный корень из числа x, например:

[math]::Sqrt(9) возвращает 3


возведение в степень и взятие квадратного корня

Метод ::Exp(x) служит только для одного —  возведения в степень x числа E. Например так возведем E в квадрат:

[math]::Exp(2)

а так в куб:

[math]::Exp(3)


возведение в степень числа е

Продолжая тему числа E, рассмотрим еще парочку методов. Метод ::Log(x) вычисляет натуральный логарифм числа x (логарифм с основанием e), а метод ::Log10(x) — десятичный логарифм  (логарифм с основанием 10). Например:

[math]::Log(2)
[math]::Log10(2)


логарифм натуральный и десятичный

Округление

Округление — довольно часто встречающаяся операция. Метод ::Round(x,y) округляет число x, а y задает нужное количество знаков после запятой. Например:

[math]::Round(1234.5678, 2) возвращает 1234.56
[math]::Round(1234.5678, 0) возвращает 1234


округление числа с заданной точностью

Обратите внимание на правила округления:

[math]::Round(12.345, 2) возвращает 12.34
[math]::Round(12.346, 2) возвращает 12.35


правила округления

Метод ::Truncate(x) также можно использовать для округления числа x, однако в отличие от предыдущего метода округление производится очень грубо — путем отбрасывания всех знаков после запятой. Например:

[math]::Truncate(1.2) возвращает 1
[math]::Truncate(1.8) возвращает 1
[math]::Truncate(-1.2) возвращает -1
[math]::Truncate(-1.8) возвращает -1


обрезка числа

И еще два метода округления. Метод ::Ceiling(x) округляет число х в большую сторону до ближайшего целого значения. Например:

[math]::Ceiling(1.2) возвращает 2
[math]::Ceiling(1.8) возвращает 2
[math]::Ceiling(-1.2) возвращает -1
[math]::Ceiling(-1.8) возвращает -1


округление в большую сторону

Метод ::Floor(x) также округляет число до ближайшего целого значения, но в меньшую сторону. Например:

[math]::Floor(1.2) возвращает 1
[math]::Floor(1.8) возвращает 1
[math]::Floor(-1.2) возвращает -2
[math]::Floor(-1.8) возвращает -2


округление в меньшую сторону

Сравнение

Есть в классе [math] пара методов для сравнения. К примеру метод ::Min(x,y) возвращает наименьшее, а метод ::Max(x,y) — наибольшее из двух чисел:

[math]::Min(1,2) возвращает 1
[math]::Max(1,2) возвращает 2
[math]::Min(1,-2) возвращает -2


выбор минимума и максимума

А метод ::Equals(x,y) сравнивает числа х и y и возвращает True, если числа ровны и False, если не ровны. Например:

[math]::Equals(1,2) возвращает False
[math]::Equals(2,2) возвращает True


сравнение двух чисел

Важно помнить, что для сравнения x и у должны иметь один тип данных. К примерк, для оператора Equals 2 (int32) не равно 2.0 (double) или ″2″ (string):

[math]::Equals(2,2.0) возвращает False
[math]::Equals(2,″2″) возвращает False


сравнение различных типов

Абсолютное значение и знак числа

Метод ::Abs(x) возвращает абсолютное значение числа х, т.е. значение без учета знака. Например:

[math]::Abs(10) возвращает 10
[math]::Abs(-10) возвращает 10


абсолютное значение числа

Метод ::Sign(x) возвращает значение, определяющее знак числа х — 1 если число положительное, -1 если число отрицательное и 0, если x равен 0. Например:

[math]::Sign(20) возвращает 1
[math]::Sign(0) возвращает 0
[math]::Sign(-10) возвращает -1


определение знака числа

В качестве x можно передавать не только отдельные числа, но и выражения:

[math]::Sign(10-15) возвращает -1
[math]::Sign(-1*2+2) возвращает 0


определение знака выражения

Разное

Теперь рассмотрим некоторые специфические функции, которые скорее всего вам никогда не понадобятся 🙂

Функция ::IEEERemainder(x,y) возвращает остаток от деления X/Y, однако делает это несколько необычным образом. Так при делении X/Y остаток вычисляется по формуле X — (Y * Q), где Q является частным от деления X/Y, округленным до ближайшего целого числа. Если X/Y находятся на равном расстоянии от двух целых чисел, то выбирается четное. Поскольку значение Y * Q может быть больше чем X, остаток может принимать как положительные, так и отрицательные значения. Например:

[math]::IEEERemainder(19,6) возвращает 1
[math]::IEEERemainder(18,6) возвращает 0
[math]::IEEERemainder(17,6) возвращает -1

Другими словами, IEEERemainder возвращает минимальное число, которое необходимо добавит или вычесть из делимого X, чтобы сделать его кратным делителю Y.


получение остатка от деления

Метод ::BigMul предназначен для умножения двух 32-битных чисел. Результат умножения возвращается в виде 64-битного числа. Использовать этот метод стоит в том случае, если для результата вам не хватает 32-битов.


умножение двух чисел

Метод ::DivRem(x,y,[ref]$R) вычисляет результат деления X/Y и возвращает остаток от деления в выходном параметре ($R). Обратите внимание, что переменная $R должна быть определена заранее:

$R = 0
[math]::DivRem(20,3,[ref]$R) возвращает частное 6
$R возвращает остаток от деления 2


получение частного и остатка от деления

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

Ну и в завершение тригонометрические функции. Наврядли вы будете использовать их в своих скриптах, поэтому привожу их исключительно для общего развития. Напомню, что по умолчанию эти функции вычисляются в радианах, поэтому для перевода в градусы необходимо использовать конструкцию (x/180*Pi). Например вычислим синус 90º:

$Pi = [math]::PI
[math]::Sin(90/180 * $Pi)

косинус 180º:

[math]::Sin(180/180 * $Pi)

или тангенс 45º:

[math]::Tan(45/180 * $Pi)


тригонометрические функции

Обратные тригонометрические функции. Они также вычисляются в радианах, для преобразования в градусы результат надо умножить на 180/Pi. Для примера вычислим арксинус 1 (угол, синус которого равен 1):

[math]::Asin(1)*180/$Pi

арктангенс 0:

[math]::Atan(0)*180/$Pi

и арккосинус -1:

[math]::Acos(-1)*180/$Pi


обратные тригонометрические функции

Ну вот, основные математические функции PowerShell мы рассмотрели. А более подробно познакомится со свойствами и методами класса [math] можно на MSDN.

Комментарии


Дистанционная компьтерная помощь, удаленная компьютерная помощь онлайн.

Популярные сообщения из этого блога

Лучшие плагины для OBS Studio

Open Broadcast Software или OBS - это свободное программное обеспечение с открытым исходным кодом для стриминга аудио и видео данных в сеть интернет. Программа полностью кроссплатформенная и может работать в Windows, Linux или MacOS. Это отличная альтернатива для таких программ, как Wirecast и XSplit. OBS использует для вещания стандартный протокол обмена сообщениями в реальном времени, а поэтому может транслировать данные в любой сервис, поддерживающий это, например, Yotube. Несмотря на широкие возможности OBS, программа поддерживает еще и множество плагинов. В этой статье мы рассмотрим лучшие плагины для OBS Studio, которые вы можете использовать. Содержание статьи: Лучшие плагины OBS Studio 1. Browser Source Plugin 2. Video Source Plugin 3. Simple Scene Switcher 4. DirectShow Audio Source 5. CLR Browser Source 6. OBS Remote 7. AMD Advanced Media Framework Encoder 8. Text Source Plugin Выводы Лучшие плагины OBS Studio Чтобы найти плагины OBS Studio для Video пользо

Лучшие аналоги Paint для Linux

Когда я работал в Windows, я часто использовал стандартную программу редактора изображений Windows - Paint. Не всегда нужен очень и многофункциональный инструмент вроде Photoshop или Gimp. Иногда, чтобы подправить ту или иную картинку, дорисовать на ней несколько фигур или вставить текст достаточно простого, легкого в освоении графического редактора вроде Paint. В Linux таких программ довольно много. В этой инструкции мы рассмотрим лучшие аналоги Paint для Linux. В этот список не будут включены такие программы, как Gimp и Krita, ведь это полнофункциональные графические редакторы, векторные редакторы, такие как Inkscape мы тоже рассматривать не будем. А теперь перейдем к списку. Содержание статьи: KolourPaint MyPaint Gnome Paint XPaint Pinta mtPaint GPaint Rassam-paint Выводы KolourPaint На первом месте в списке аналогов Piant для Linux будет KoloutPaint. Это стандартный графический редактор для окружения рабочего стола KDE. Он поддерживает множество форматов изображе

Подключение OneDrive в Linux

OneDrive (Ранее известный как SkyDrive) это популярное облачное хранилище файлов от Майкрософт. Сейчас OneDrive бесплатно предоставляет 7 гигабайт пространства новым пользователям. Как вы знаете OneDrive хорошо интегрирован с другими продуктами компании  Microsoft. В OneDrive Также есть официальный клиент который автоматически загружает ваши видео и фотографии с камеры в облако. Но к сожалению этот клиент недоступен для операционных систем семейства Linux. Но не все так плохо. Сообщество открытого программного обеспечения уже нашло решение. Это opedrive-d от Boilermaker. Запустившись как демон программа автоматически синхронизирует локальную папку с облаком OneDrive. Содержание статьи: Установка Onedrive-d в Linux Настройка Синхронизация локальной папки с OneDrive Установка Onedrive-d в Linux Несмотря на то что onedrive-d разрабатывается для Ubuntu/Debian, CentOs/Fedora/RHEL поддерживается тоже хорошо. Для установки достаточно набрать несколько команд: $ git clone h