Читайте также:
|
|
- относительная точность ЭВМ (машинная точность, машинный эпсилон, машинный нуль).
Значение этой величины определяется разрядностью мантиссы и способом округления.
На основании имеющихся сведений о представлении чисел в ЭВМ можно сделать ряд важных выводов.
1. Диапазон изменения чисел в ЭВМ ограничен.
2. Все числа , такие, что не представимы на ЭВМ и рассматриваются как машинная бесконечность. Попытка получить такое число приведёт к аварийному останову ЭВМ по переполнению.
3. Все числа , такие, что для ЭВМ неразличимы и представляются как нуль (машинный нуль). Получение числа называется исчезновением порядка (антипереполнением). При исчезновении порядка автоматически полагается и вычисления продолжаются.
Замечание: – машинная точность; – минимальное положительное число, представимое на ЭВМ. Это совершенно разные числа, причём .
4.
Плотность расположения чисел на «машинной» числовой оси
Вычисление машинного нуля. Для приближённого вычисления машинного эпсилон удобно пользоваться следующим определением.
Определение: Машинное эпсилон – минимальное из представимых на ЭВМ чисел , для которых , где - машинная арифметическая операция сложения.
Величину можно оценить во время вычислительного процесса. Для этого достаточно включить в программу фрагмент, реализующий следующий метод.
Полагая , следует вычислять последовательно
,
проверяя каждый раз выполнение неравенства . Как только при некотором окажется, что , следует положить .
Замечание: Полученное таким способом значение, может отличаться от в 2 раза. Обычно оно используется так, что эта погрешность не имеет значения.
Ниже приведены примеры процедур, реализующих вычисление «машинного нуля».
......
Приложение во время выполнения
Листинг 5.3.а
procedure TForm1.Button1Click(Sender: TObject);
type
RealType=real;
var
Epsilon:RealType;
i:integer;
begin
i:=1;
Epsilon:=1;
while (1+Epsilon/2)>1 do
begin
Epsilon:=Epsilon/2;
ShowMessage(IntToStr(i)+'-я итерация'+
FloatToStr(Epsilon));
i:=i+1;
end;
Label1.Caption:=FloatToStr(Epsilon)+#13+'число итераций'+
IntToStr(i);
end;
Арифметический сопроцессор всегда обрабатывает числа в формате Extended, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются в основном для экономии памяти.
Например, если «машинное эпсилон» вычисляется с помощью программы, показанной в Листинге 5.3.а, то независимо от объявления типа RealType (он может быть Single, Real, Double или Extended) на печать будет выдан результат
Е-19,
что соответствует типу Extended. Происходит это по той причине, что все операнды вещественного выражения 1+Epsilon/2 в операторе while перед вычислением автоматически преобразуются к типу Extended.
Чтобы получить правильный результат, программу необходимо изменить следующим образом:
Листинг 5.3.б
procedure TForm1.Button1Click(Sender: TObject);
var
eps,eps1:real;
i:integer;
begin
i:=1; eps:=1;
repeat
eps:=eps/2;
eps1:=1+eps;
ShowMessage(IntToStr(i)+'-я итерация
'+#13+'eps='+FloatToStr(eps));
i:=i+1;
until eps1=1;
Label1.Caption:= FloatToStr(2*eps)+#13+'число итераций'+
IntToStr(i);
end;
Пример 5.4. Найти сумму всех целых чисел, больших -50 и меньших 200, которые кратны 5 и 8 и заканчиваются на 5 или 0. Вывести эти числа.
Приложение во время выполнения
Дата добавления: 2015-07-10; просмотров: 202 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Листинг 5.2 | | | Листинг 5.6 |