суббота, 16 мая 2015 г.

Julia. Продолжаем знакомство

Если вы умеете работать в Matlab (Freemat, Scilab, Octave), то начать пользоваться Julia сможете без особых проблем. Многое покажется знакомым и родным. Стандартные арифметические действия обозначают стандартные арифметические операции, а "\" - это деление правого числа на левое. Константы pi - "пи", e - постоянная Эйлера, Inf - бесконечность, NaN - неопределённый результат. А при работе в режиме интерпретатора доступна переменная ans, которая хранит результат последней операции.


В общем, лучше поговорим о различиях. Благодаря использованию юникода имена переменных можно записывать на любом языке. Если хотите, можете написать программу, где всё, кроме встроенных функций и управляющих конструкций, будет по-русски. Кстати, в Julia существет договорённость, что имена переменных, функций и макросов пишутся строчными буквами, а название типа начинается с заглавной. Но вы, в принципе, можете писать как угодно, программа всё равно вас поймёт!
Для упрощения записи знак умножения после числового коэффициента перед переменной можно не ставить, но при этом и пробелов между ними оставлять нельзя.
В расчётах можно использовать принятые в программировании операции со знаком равенства: +=, *=, >>= и т.д. Уточню, что выражение "x+=5" - сокращённая форма записи для "x = x + 5". Знак ">>" (битовый сдвиг вправо) здесь появился потому, что Julia позволяет работать и с битовыми выражениями, но я на них останавливаться не буду, также как на числах в двоичном, восьмеричном и шестнадцатеричном представлениях.
Для сравнения чисел используется знаки >, >=, <, <=, == (тождественно равны), != (не равны). Причём неравенства можно объединять в цепочки, т.е. вы можете написать что-то типа 4 < 5 <= 6 == 6 < 7 и получить true.
Поскольку переменные i и j часто используют при организации циклов, для записи комплексных чисел в Julia используется im (которая обозначает квадратный корень из -1). Над комплексными числами можно выполнять все стандартные операции, в том числе использовать в качестве аргумента функций. Но будьте внимательны при записи комплексного знаменателя, если есть сомнения, ставьте скобки...
При использовании комплексных числе пригодятся функции:
real(z) - действительная часть,
imag(z) - мнимая часть,
conj(z) - комплексно сопряжённое число,
abs(z) - модуль, 
abs2(z) - квадрат модуля,
angle(z) - аргумент комплексного числа.

В программе реализована возможность работы и с рациональными числами, которые обозначаются знаком "//".  К ним применимы все стандартные операции, в том числе сравнение. Полезные функции:
num(r) - числитель,
den(r) - знаменатель,
float(r) - преобразует к десятичной дроби.
И напоследок немного информации для пытливых умов. Так устроен наш мир, что "выигрывая в силе, проигрываем в расстоянии". В программировании это может звучать как "выигрывая в абстракции, проигрываем в эффективности". Чтобы найти компромисс, разработчики Julia предложили возможность работы на нескольких уровнях абстракции, в зависимости от индивидуальных предпочтений. Вы можете работать на верхнем уровне, не задумываясь о машинном представлении чисел, но машинное число, в отличие от реального, ограничено выделенным для него объёмом памяти. И когда эта память заканчивается, начинается магия...злая магия) Так вот, в Julia есть возможность контролировать внутреннее представление данных и управлять им. Узнать тип используемого числа можно с помощью функции typeof(число). Наибольшее и наименьшее из чисел данного типа возвращают функции typemax(тип) и typemin(тип). Машинный ноль при выбранном типе выводит функция eps(тип).
Какую пользу из всего выше сказанного может извлечь человек, далёкий от программирования? Julia позволяет работать и с "обычными", и с бесконечно точными числами (или почти бесконечно...). В тех случаях, когда важна точность несмотря ни на что, можно использовать специальные типы данных: BigInt для целых чисел и BigFloat для величин с плавающей точкой.



Комментариев нет:

Отправить комментарий