Рубиновые целые числа и числа с плавающей точкой (математически: рациональные числа) по умолчанию не строго привязаны к классическим ограничениям, связанным с CPU. В Ruby целые числа и числа с плавающей точкой автоматически прозрачно переключаются на некоторые "типы bignum", если размер превышает максимум классических размеров.
Вероятно, кто-то хочет использовать некоторую разумно оптимизированную и «законченную», разнообразную математическую библиотеку, которая использует «bignums». Именно здесь программное обеспечение, подобное Mathematica, действительно сияет своими возможностями.
Начиная с 2011 года Mathematica чрезвычайно дорогая и ужасно ограничена с точки зрения взлома и повторной отправки, особенно если вы хотите отправить математическое программное обеспечение в качестве компонента небольшого, недорогого веб-приложения или проекта с открытым исходным кодом. , Если нужно сделать только грубое сокращение чисел, когда визуализация не требуется, то существует очень жизнеспособная альтернатива Mathematica и Maple. Альтернативой является система компьютерной алгебры REDUCE, основанная на Лиспе, с открытым исходным кодом, зрелая (на протяжении десятилетий) и находящаяся в стадии активной разработки (в 2011 году). Как и Mathematica, REDUCE использует символьные вычисления.
Для признания Mathematica я говорю, что с 2011 года мне кажется, что Mathematica является лучшим в интерактивных визуализациях, но я думаю, что с точки зрения программирования есть более удобные альтернативы, даже если Mathematica был открытым исходным кодом. проект. Мне кажется, что Mahtematica также немного медленный и не подходит для работы с огромными наборами данных. Мне кажется, что ниша Mathematica - это теоретическая математика, а не вычисление чисел в реальной жизни. С другой стороны, издатель Mathematica, Wolfram Research, размещает и поддерживает один из самых качественных, если не самый качественный, бесплатный в использовании справочный сайт по математике на планете Земля: http://mathworld.wolfram.com/
Система онлайн-документации, поставляемая в комплекте с Mathematica, также действительно хороша.
Говоря о скорости, стоит упомянуть, что REDUCE, как говорят, работает даже на маршрутизаторе Linux. Сам REDUCE написан на Лиспе, но поставляется с двумя собственными, конкретными реализациями Лисп. Один из Лиспов реализован на Java, а другой - на C. Они оба работают прилично, по крайней мере, с математической точки зрения. REDUCE имеет 2 режима: традиционный «математический режим» и «режим программистов», который обеспечивает полный доступ ко всем внутренним компонентам на языке, на котором REDUCE сам написан: Lisp.
Итак, мое мнение таково: если посмотреть на объем работы, который требуется для написания математических подпрограмм, не говоря уже о всех символических вычислениях, которые все являются ЗРЕЛЫМИ в REDUCE, то можно сэкономить огромное количество времени ( буквально десятилетия), выполняя большую часть математической части в REDUCE, особенно учитывая, что она была проверена и отлажена профессиональными математиками в течение длительного периода времени, использовалась для выполнения символических вычислений на суперкомпьютерах старой эпохи для реальных профессиональных задач и прекрасно работает действительно быстрый, на современных бюджетных компьютерах. Он также не разбился о меня, в отличие от хотя бы одного коммерческого пакета, который я не хочу называть здесь.
http://www.reduce -algebra.com /
Чтобы проиллюстрировать, где символические вычисления необходимы на практике, я привожу пример решения системы линейных уравнений с помощью инверсии матриц. Чтобы инвертировать матрицу, нужно найти определители. Округление, которое происходит с напрямую поддерживаемыми процессором типами с плавающей запятой, может отображать матрицу, которая теоретически имеет обратную, в матрицу, которая не имеет обратной. Это, в свою очередь, создает ситуацию, когда большую часть времени программное обеспечение может работать просто отлично, но если данные немного «неудачны», то происходит сбой приложения, несмотря на то, что в программном обеспечении нет ничего плохого в алгоритме, кроме округления чисел с плавающей точкой.
У рациональных чисел абсолютной точности есть серьезное ограничение. Чем больше вычислений выполняется с ними, тем больше памяти они потребляют. По состоянию на 2011 год я не знаю никаких решений этой проблемы, кроме как быть осторожным и отслеживать количество операций, которые были выполнены с числами, а затем округлять числа, чтобы сэкономить память, но нужно выполнить округление очень точный этап расчетов, чтобы избежать вышеупомянутых проблем. Если возможно, то округление должно быть выполнено в самом конце вычислений как самая последняя операция.