Основы объектно-ориентированного программирования на языке C# book | Page 103

6.8 Керування машинним зображенням чисел та особливостi виконання арифмет Console.WriteLine("x1={0:E}", x1); } else Console.WriteLine("no roots"); } } При завершеннi роботи програми ми одержимо, що x 1 = 0.00e+0, x 2 = 5.0e+45 Пiдставивши цi значення до квадратного рiвняння, у результатi дiстанемо 1. 6.8 Керування машинним зображенням чисел та особливостi виконання арифметичних операцiй Спiвпроцесор майже завжди виконує всi операцiı̈ над дiйсними чи- слами у спецiальному 80-бiтному форматi. Вiн має спецiальний ке- руючий двобайтовий регiстр. Установлення окремих бiтiв регiстра диктує спiвпроцесору ту чи iншу поведiнку. Його бiти вiдповiдають за те, як будуть округлятися числа, як спiвпроцесор розумiє нескiн- ченнiсть. Розглянемо тiльки два бiти регiстра – восьмий i дев’ятий. Саме вони визначають, як оброблятимуться числа всерединi спiвпро- цесора. Якщо восьмий бiт мiстить одиницю (так установлено за умовча- нням), то 10 байтiв внутрiшнiх регiстрiв спiвпроцесора використо- вуватимуться повнiстю. Якщо ж цей бiт дорiвнює нулю, то все ви- значається значенням дев’ятого бiта. Якщо вiн дорiвнює одиницi, то використовуються 53 розряди мантиси (iншi завжди дорiвнюють ну- лю). Якщо ж цей бiт дорiвнює нулю – то лише 24 розряди манти- си. Це збiльшує швидкiсть обчислень, але зменшує точнiсть. Iншими словами, точнiсть роботи спiвпроцесора може бути знижена до типу double чи навiть float . Однак це стосується тiльки мантиси, порядок завжди буде мiстити 15 бiтiв. Сучаснi спiвпроцесори обробляють числа з такою швидкiстю, що навряд чи в кого-небудь може виникнути необхiднiсть у прискореннi за рахунок точностi. Проте це треба знати. Ми вже зазначали, що властивiсть повноти не виконується при ма- шинному зображеннi дiйсних чисел, оскiльки не кожен правильний дрiб може бути зображений у виглядi скiнченного. Наприклад, 1/9 = 0.11111..., 1/3 = 0.333333... i т. д. При роботi з такими числами використовується не точне, а наближене значення. Це потрiбно вра- ховувати при написаннi програм. 103