> 12+34/47;
> -12+34*47;
1586> 12*10^(-15)*3;
Результаты операций с целыми числами в общем случае представляются рациональными числами, являющимися отношениями целых чисел.
Десятичная точка в числах имеет особый статус — указание ее в любом месте числа, в том числе в конце, делает число вещественным и ведет к переводу вычислений в режим работы с вещественными числами. Например:
> 12.*10^(-15)*3;
.3600000000 10-13Количеством выводимых после десятичной точки цифр можно управлять, задавая значение системной переменной окружения Digits:
> Digits:=3: 1./3;
.333> Digits:=10; ехр(1.);
Digits := 10 2.718281828> Digits:=40: evalf(Pi);
3.141592653589793238462643383279502884197Как видно из этих примеров, ввод и вывод чисел имеет следующие особенности:
• для отделения целой части мантиссы от дробной используется разделительная точка;
• нулевая мантисса не отображается (число начинается с разделительной точки);
• мантисса отделятся от порядка пробелом, который рассматривается как знак умножения;
• мнимая часть комплексных чисел задается умножением ее на символ мнимой единицы I (квадратный корень из -1);
• по возможности Maple представляет численный результат в виде точного рационального числа (отношения двух целых чисел).
Для работы с числами Maple имеет множество функций. Они будут рассмотрены в дальнейшем. С помощью многофункциональной функции convert Maple может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатиричные) в десятичные числа:
> convert("11001111", decimal, binary);
207> convert("1AF.С", decimal, hex);
431.7500000> convert("Maple", decimal, 36);
374512822.1.4. Точная арифметика
Благодаря возможности выполнения символьных вычислений Maple, как и другие СКА, реализует точную арифметику. Это значит, что результат может быть получен с любым числом точных цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например, таких как приведены ниже:
> 101!;
942594775983835942085162312448293674956231279470254376832 \ 788935341697759931622147650308786159180834691162349000 \ 3549599583369706302603264000000000000000000000000> (101!+1)-101!;
1> (10005!)/10000!;
100150085022502740120> 2^101-2^100;
1267650600228229401496703205376> 2^(2^(2^2));
65536> 2^101-2^100.0;
0.1267650600 10³¹> Digits;
10Обратите внимание на то, что в последнем примере точность резко потеряна, так как показатель степени 100.0 был задан как число с плавающей точкой. Соответственно и результат оказался в форме такого числа. Число верных цифр результата задает системная переменная Digits (по умолчанию 10).
Приведем еще пару примеров точных вычислений некоторых функций (с точностью до 150 знаков мантиссы):
> evalf(ехр(1),150);
2.71828182845904523536028747135266249775724709369995957496 \ 696762772407663035354759457138217852516642742746639193 \ 200305992181741359662904357290033429526> evalf(sin(1.),150);
0.84147098480789650665250232163029899962256306079837106567 \ 275170999191040439123966894863974354305269585434903790 \ 79206742932591189209918988811934103277292.1.5. Вычисление числа π с произвольной точностью
Разработчики систем Maple и Mathematica утверждают, что в принципе возможны вычисления и с плавающей точкой с заданием до миллиона точных цифр мантиссы. Практически такая точность почти никогда не нужна, по крайней мере для физиков и инженеров. Например, всего 39 точных цифр числа π достаточно, чтобы вычислить длину окружности всей Вселенной с точностью до диаметра атома водорода. Однако истинные математики одно время были просто «помешаны» на вычислении числа π с большой точностью. Кое кто потратил на это всю жизнь. Выдающийся вклад в такие расчеты внес Рамануджан, который еще в 1916 году предложил алгоритмы и формулы для вычисления числа π с произвольной точностью.
На рис. 2.1 представлено задание одной из самых известных формул Рамануджана. Уже первый член суммы этой формулы (k= 1) дает значение числа π с погрешностью вычисления менее 3∙10-8. Увеличение k на 1 каждый раз увеличивает число верных десятичных знаков на 8, т. е. в сто миллионов раз! В принципе эта формула может дать до миллиарда и более точных знаков числа π!
Рис. 2.1. Проверка вычислений по формуле Рамануджана
У инженеров формула Рамануджана может вызвать приступ головной или зубной боли. Уж больно несуразна она с первого взгляда. О какой точности можно говорить, если на подавляющем большинстве языков программирования корень квадратный из двух, факториал и степень вычисляются всего с 8–15 точными знаками?