Проблеми з числами програма Калькулятор в Visual C # (Sharp)

Наше розуміння концепції числа і те, що вважають числом компютери, являюя абсолютними різними речами У дитинстві ми вчилися рахувати, починаючи з 1 і закінчуючи 100, що тоді для нас здавалося величезним числом У міру того як ми дорослішали, ми дізналися про число 0 і про числа менше нуля Ще пізніше ми просунулися до вивчення простих і десяткових дробів

Протягом всього цього процесу нашого пізнавання чисел, число 1 і число 1,5 для нас були однаковими, тобто вони були просто числами Але для компютера це два різних типи чисел

Причиною цьому є прагнення розробників компютерів до більшої еектівності в їх роботі, для чого застосовуються різні способи зберігання чисел Як ми знаємо, в нашій десятковій системі ми починаємо рахувати з 0, доходимо до 9, після чого наступним буде число 10 Винахідниками десятковоїсистеми счаются вавилоняни, але вони застосовували шістдесяткова систему числення, в якій було 60 унікальних складових ідентифікаторів чисел, в порівнянні з 10 простими в нашій десятковій системі У компютерах також застосовується позиційна система числення, але тільки в ній існують лише два унікальних ідентифікатора – 1 і 0 Така система числення називається двійковій, або барной Застосування в компютерах двох унікальних числових ідентифікаторів обумовлено тим, що вони представляють два унікальних стану: включено і вимкнене Базовим компонентом компютера є транзистор, який може розрізняти два стани – включено і вимкнене

На рис 212 наведено приклад виконання рахунки компютером в двійковій системі числення У даному випадку рахунок йде до 7

1 Помилковий результат: -294967296 Результат повинен би бути: 4869586958 695 –Пер

Компютери вважають, використовуючи цифри 0 і 1

Люди вважають за допомогою цифр 0, 1 9

Коли компютер вважатиме О, потім 1, збільшується значення наступної позиції (для людей це відбувається після рахунку 9)

Не думайте про це число, як про одну сотню Це один, нуль, нуль по підставі 2 0 = 0 1 = 1 10 = 11 лютого = 3100 = 4

101  = 5 110 = 6 111 = 7

Рис 212 Компютер вважає до 7 в двійковій системі числення

Теоретично, людина може вважати до якого завгодно числа Єдине огріченіе тут – це тривалість його життя Але для компютера сущес обмеження на величину числа, до якого він може вважати, накладаємо такими компонентами його реалізації, як память довільного доступу, жорсткий диск тощо Також існують обмеження на розмір чисел конкретних типів Наприклад, використовуючи цілочисельний тип (int), можна вважати тільки до певної величини і тільки цілими числами

Різні типи числових даних можна розглядати, як автомобільний одетр Верхня межа одометрів більшості автомобілів становить 1 млн км Уявіть тепер, що на одометрі потрібно скласти 900 000 і 200 000 Результат буде 100 000, а не очікуваний 1100000 Те ж саме відбувається при додаванні на компютері двох цілочисельних значень по 2 млн кожне

Але у випадку з одометром, особливо при купівлі вживаного автомобіля, ми не знаємо, чи пройшов одометр свою межу або скільки разів він його пройшов Ви може купити автомобіль з 100 000 км на одометрі, який насправді проїхав 1100000 км На щастя, NET знає, коли число переходить через верхню гран, встановлену для його типу Ця ситуація називається арифметичним перолненіем або антипереполнение Переповнення – це ситуація, коли одометр переходить через верхню межу (від 999 999 до 1 100 000), а антипереполнение – це ситуація, коли одометр переходить через нижню межу (від 0 до -10 0 ТОВ) Можливість виявлення будь-якої з цих ситуацій можна активувати в якості властивості проекту Щоб увімкнути визначення переповнення / антипереполнение, виконайте таку послідовність дій для бібліотеки класу Calculator:

1 Клацніть правою кнопкою миші по проекту Calculator вSolution  Explorer

і в контекстному меню виберіть команду Properties

2 У панелі властивостей активізуйте вкладкуBuild,  а на ній натисніть кнопку

Advanced

3 У діалоговому вікніAdvanced  Build  Settings  встановіть прапор

Check for arithmetic overflow/underflow

4  Клацніть кнопку OK, щоб зберегти установки

Тепер при виконанні тестового консольного додатка буде видано слідуючи системне повідомлення про помилку переповнення (виберіть опцію НЕ випоять налагодження):

Unhandled Exception:  SystemOverflowException: Arithmetic operation resulted in an overflow

Помилку можна знайти, виконавши додаток в режимі налагодження (за допомогою кліше ) Результат повинен бути подібний показаному на рис 213 Щоб оановіть налагодження, натисніть комбінацію клавіш +

Рис 213 Visual С # Express висвічує помилку переповнення

Ситуація з переповненням являє собою проблему, і те, що NET може вловити цю проблему, вже непогано Але остаточним бажаним вирішенням цієї проблеми було б отримання можливості все-таки скласти 2 млрд з 2 млрд Зрештою, Біллу Гейтсу було б більше до душі мати 4 млрд на своєму банківському рахунку, ніж якесь обчислене відємне значення або повідомити з банку, що сповіщає його про те, що банк не може прийняти його 4 млрд

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*