Визначаємо машинний нуль, машинну нескінченність і машинний епсилон

Визначаємо машинний нуль, машинну нескінченність і машинний епсилон

Довіряти розрахунком, зробленому на комп'ютері, без тіні розуміння того, як саме виконаний цей розрахунок - одна з найгірший речей, які може допустити в своїй роботі інженер. На жаль, вже нерідкі "фахівці", яких не бентежить ненульовий результат, отриманий при множенні на нуль, або, навпаки, нуль там, де теоретично нуля бути не повинно.

Тому повторимо в цій замітці кілька азбучних істин про подання дійсних чисел у комп'ютері і правилах виконання операцій з ними.

У IBM-сумісної ЕОМ для дійсних чисел використовується двійкова система числення і прийнята форма представлення чисел з плаваючою точкою виду x = m * 2 p. де мантиса m = ± (g1 * 2 -1 + g2 * 2 -2 +. + gt * 2 -t). g1. gt - виконавчі цифри, причому, g1 = 1. а ціле значення p називається двійковим порядком. Кількість цифр t. який відводиться для запису мантиси, називається розрядністю мантиси. Діапазон представлення чисел в ЕОМ обмежений кінцевої розрядністю мантиси і значенням числа p.

Все представимо на ЕОМ речові числа x задовольняють нерівності 0

Всі числа, по модулю бо льшие X∞. не представимо на ЕОМ і розглядаються як машинна нескінченність. Всі числа, по модулю менші X0. для комп'ютера не відрізняються від нуля і розглядаються як машинний нуль. Машинним епсилон εM називається відносна точність ЕОМ, тобто межа відносної похибки подання дійсних чисел. Можна показати, що εM ≈ 2 -t. Нехай x * = m * 2 p. Тоді межа абсолютної похибки подання цього числа дорівнює δ (x *) ≈ 2 -t-1 * 2 p. Оскільки 1 / 2≤m<1. то величина относительной погрешности представления оценивается как δ(x * ) ≈ δ(x * ) / |x * | ≈ (2 -t-1 *2 p ) / (m*2 p ) = 2 -t-1 / m ≤ 2 -t-1 / 2 -1 = 2 -t.

Машинне епсилон визначається розрядністю мантиси і способом округлення чисел, реалізованим на конкретній ЕОМ.

Приймемо наступні способи визначення наближених значень шуканих величин:

  • покладемо X∞ = 2 n. де n - перший натуральне число, при якому сталося переповнення;
  • покладемо X0 = 2 -m. де m - перший натуральне число. при якому 2 -m збігається з нулем;
  • покладемо εM = 2 -k. де k - найбільше натуральне число, при якому сума обчисленого значення 1 + 2 -k ще більше 1. Фактично, εM є межа відносної похибки подання числа x * ≈ 1.

Далі задаємо це в потрібній середовищі (пакеті) і підбираємо значення параметрів, ось приклад для мого MathCAD 15:


машинний нуль, машинна нескінченність і машинний епсилон в MathCAD 15

Ну і пара стандартних нагадувань наостанок: До речовим значенням в загальному випадку не застосовується операція == ( "порівняння") через неточного уявлення цих значень в пам'яті комп'ютера. Тому для дійсних змінних відношення виду a == b зазвичай замінюється на fabs (a-b) ≤eps. де fabs () - функція обчислення модуля дійсного числа, а eps - мала величина, яка визначає допустиму похибку. Допустиму похибку можна ввести в розрахунок також через стандартний метод округлення round, наприклад, лівий розрахунок твори чисел в MathCAD не дасть нуля, а правий - так:

Визначаємо машинний нуль, машинну нескінченність і машинний епсилон

облік похибок через метод round (Mathcad)

Схожі статті