Выбрать главу

> 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);

37451282

2.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 \ 7920674293259118920991898881193410327729

2.1.5. Вычисление числа π с произвольной точностью

Разработчики систем Maple и Mathematica утверждают, что в принципе возможны вычисления и с плавающей точкой с заданием до миллиона точных цифр мантиссы. Практически такая точность почти никогда не нужна, по крайней мере для физиков и инженеров. Например, всего 39 точных цифр числа π достаточно, чтобы вычислить длину окружности всей Вселенной с точностью до диаметра атома водорода. Однако истинные математики одно время были просто «помешаны» на вычислении числа π с большой точностью. Кое кто потратил на это всю жизнь. Выдающийся вклад в такие расчеты внес Рамануджан, который еще в 1916 году предложил алгоритмы и формулы для вычисления числа π с произвольной точностью.

На рис. 2.1 представлено задание одной из самых известных формул Рамануджана. Уже первый член суммы этой формулы (k= 1) дает значение числа π с погрешностью вычисления менее 3∙10-8. Увеличение k на 1 каждый раз увеличивает число верных десятичных знаков на 8, т. е. в сто миллионов раз! В принципе эта формула может дать до миллиарда и более точных знаков числа π!

Рис. 2.1. Проверка вычислений по формуле Рамануджана

У инженеров формула Рамануджана может вызвать приступ головной или зубной боли. Уж больно несуразна она с первого взгляда. О какой точности можно говорить, если на подавляющем большинстве языков программирования корень квадратный из двух, факториал и степень вычисляются всего с 8–15 точными знаками?