Подробное описание того, как Джулия обрабатывает числа

Вступление

Julia - отличный язык, который почти исключительно почитается за фантастическую методологию работы с числами. Конечно, в чудесном мире науки это также означает мнимые числа и комплексные числа, рожденные одним воображаемым родителем и одним реальным родителем. По большей части, Джулия отлично справляется с действительными и мнимыми числами. Это особенно верно, когда язык сравнивается с менее математически ориентированными языками программирования или языками, которые не собирались использовать с научной точки зрения после их выпуска.

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

Если вы хотите узнать больше о супер-типе Джулии, я написал об этом целую статью, которую вы можете проверить здесь !:



Числа

Верхушка числовой иерархии в Julia - это тип, с которым вы, возможно, знакомы:

Числа

Число - это все, что имеет непрерывное значение. Числа могут быть воображаемыми, иррациональными или даже сложными. В Юлии нет строго вымышленных чисел. Вместо этого мы используем воображаемые границы комплексного числа, создавая наше первое иерархическое деление на эти типы. Обратите внимание, что любая функция, которая принимает числовой тип, может поддерживать любой из числовых типов, которые отнесены к категории ниже. Это то, что делает супер-типизацию в Julia такой уникальной и блестящей, что мы можем существенно ограничить различные части нашего типа, чтобы они работали только с определенными функциями, просто используя множественную отправку для любых произвольных типов. Однако следующий тип не является произвольным, потому что это фактически комплексные числа, о которых мы говорили ранее.

Другое начальное деление на этот тип - действительные числа. Если у нас есть функция, которая должна принимать действительное число, мы можем привести тип Real к любому аргументу и сделать возможным предоставление любого типа числа, будь то float64, Int64 или иное. Давайте взглянем на эту визуализированную иерархию:

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

Действительные числа

В языке программирования Julia существует три типа действительных чисел:

  • Плавает
  • Иррациональный
  • Целые числа

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

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

Что касается иррациональных чисел, это может быть так, но есть еще кое-что, что нужно распаковать без чисел с плавающей запятой и целых чисел. У Джулии есть поддержка типов данных BigInt и BigFloat, которые представляют собой огромные значения без ошибок манипуляции. Это, конечно, очень ценный атрибут языка с точки зрения научных и числовых вычислений. Если пойти немного дальше, у нас есть как целые числа со знаком, так и целые числа без знака, и даже другой подтип, который вы, возможно, не ожидали найти в числовой иерархии.

Плавающие и целые числа

В качестве подтипов нашего типа с плавающей запятой у нас есть 32-разрядное число с плавающей запятой, 64-разрядное число с плавающей запятой и большое число с плавающей запятой. Конечно, в большинстве случаев вы собираетесь работать с Float64, однако большие числа с плавающей запятой и 32-битные числа с плавающей запятой иногда могут пригодиться в зависимости от того, с какими данными и с какими системами вы можете работать. Обновляя нашу иерархию, мы видим, что все эти поплавки являются прямыми подтипами наших абстрактных типов поплавков:

Что касается целых чисел, нам нужно будет начать с еще двух абстрактных типов: со знаком и без знака. Услышав это впервые, разница между ними может стать любопытным вопросом. Однако ответ прост: целые числа без знака - это другой способ хранения целых чисел, которые должны быть положительными, но целые числа со знаком могут содержать как положительные, так и отрицательные значения, но не в таком большом объеме. Я рекомендую гораздо чаще использовать подписанные числа с плавающей запятой, так как в Julia у нас также есть большой целочисленный тип, который позволяет хранить эти большие числа как отдельные данные.

Сейчас нам не хватает только одного типа, который на самом деле является логическим типом. Логический тип фактически наследует все числовые, действительные и свойства целого числа. Вот почему мы можем добавлять типы bool или получать условные возвраты непрерывного происхождения для логических типов в языке Julia.

Заключение

С добавлением этого типа bool наша иерархия завершена, и теперь у нас в памяти есть все типы чисел на языке Julia! В качестве последнего интересного наблюдения я собираюсь покрасить все структуры в фиолетовый цвет, оставив любой из произвольных типов голубым. Я думаю, это продемонстрирует, какие типы фактически передаются и классифицируются по этим различным супертипам.

Я считаю, что эта информация очень ценна не только для программистов Юлии, но и для программистов в целом, а также для научного сообщества. Действительно здорово видеть классификацию чисел, применяемую в языке программирования с использованием его конкретной парадигмы и методологии. Я подумал, что реализация Julian была интересной и в некоторой степени захватывающей, поэтому я решил поделиться этими классными типами со всеми вами! Я надеюсь, что эту статью было приятно читать, и она предоставила гораздо больше информации о различных типах непрерывных значений в Julia, чем вам когда-либо требовалось. Спасибо за чтение!