Типи числових даних середовища CLR

Середа CLR підтримує два основних типи чисел: цілі числа і дробові числа Обидва ці типи є звичайними У методі Add () використовується звичайний целочіенний тип int Як обговорювалося раніше, цілі числа мають верхню межу, котий встановлюється розміром доступної памяті

Візьмемо, наприклад, число 123 456

Для вираження цього числа потрібно шість позицій Припустимо, наприклад, що на даній сторінці можна представляти тільки числа, що виражаються шістьма цифрами На основі цієї інформації ми можемо зробити висновок, що найбільшим числом, яке можна висловити на цій сторінці, є 999 999, а самим Мален – 0 Подібним чином специфічний числовий тип змушує середу CLR накладати обмеження на кількість цифр, застосовуваних для вираження чисел даного типу Кожна цифра, звана бітом, може бути 1 або 0, т к середу CLR висловлює числа в двійковій системі числення

Щоб дізнатися найбільше число, яке можна виразити даний тип даних, необхідно 2 звести в ступінь, рівну кількості цифр, і відняти з результату 1 (тобто 2 – 1, де п – кількість цифр) Для вираження чисел типу in t пріменяюя 32 біта Але перш ніж ми станемо зводити 2 в 32-ю ступінь, нам необхідно взяти до уваги негативні значення цього типу Насправді верхня межа типу in t НЕ 4294967295 (232 – 1), т к тип in t також висловлює негативні числа Іншими словами, змінні цього типу можуть містити негативні значення, такі як, наприклад, -2

Для вираження знака двійкового числа використовується його перший (найстарший) біт Таким чином, для вираження власне числа типу in t застосовується тільки 31 біт з 32, що робить максимальне число, яке можна виразити цим типом, рівним 2147483647, а саме менше рівним -2147483648 Повертаючись тепер до нашої проблеми зі складанням двох чисел по 2 млрд кожне, ми бачимо,

2 Г1о Принаймні, така практика в США і країнах Західної Європи У США розплата нічной за дорогий і навіть не дуже дорогий товар може викликати підозру персоналу, що ви є наркоторговцем  Пер

що тип in t не має достатньої кількості бітів для вираження результату в 4 млрд, для якого потрібно 32 біта

У табл 21 перераховані надаються в NET типи даних та їх опис При описі числових типів даних застосовується наступна термінологія:

•&nbsp&nbsp біт – Двійкова цифра 8 бітів складають один байт-,

•&nbsp&nbsp ijenoe число

•&nbsp&nbsp типи з плаваючою точкою представляють дробові числа

•&nbsp&nbsp знаковий (Signed) означає, що найстарший біт числа використовується для важливий його знака

Таблиця 21Типи числових даних NET

Ти п

Описів е

byt e

8-бітове ціле число без знака саме е меншу виражаемо е числ про одно 0, а саме е більше е – 255

sbyte

Знакове 8-бітове ціле число саме е менше е виражаемо е числ про одно

-128, А саме е більше е – 127

ushort

16-бітове ціле число без знака саме е меншу виражаемо е числ про одно 0, а саме е більшу – 65 535

short

Знакове 16-бітове ціле число саме е менше е виражаемо е числ про одно

-3 2768, а саме е більше е – 32 767

uint

32-бітове ціле число без знака саме е менше е виражаемо е числ про одно 0, а саме е більше е – 4294967295

int

Знакове 32-бітове ціле число саме е меншу виражаемо е числ про одно

-2147483648, А саме е більше е – 2147483647

ulong

64-бітове ціле число без знака саме е менше е виражаемо е числ про одно 0, а саме е більше е – 18 44 6 744 073 709 551 615

long

Знакове 64-бітове ціле число саме е меншу виражаемо е числ про одно

-9 223 372 036 854 775 808, а саме е більшу – 9 22 3 372 036 854 775 807

float

32-бітове число з плавающе ї коми саме е менше е виражаемо е числ про одно 1,5 x10 45, а саме е більше е – 3,4 x1038, з точність ю до 7 знаків

double

64-бітове числ про з плавающе ї коми саме е менше е виражаемо е числ про одно 5,0 x1 0324 а саме е більшу-1, 7×1308 , З точністю від 15 до 17 знаків, 0

decimal

28

Спеціальні й тип даних саме е менше е виражаемо е число дорівнює 1,0 x10, а саме е більше е – 1,0 x1028, з точністю, принаймні, до 28 значущих цифр 3

3тіпа decimal часто застосовується для роботи з фінансовими даними, т к з причини помилок округлення результати обчислень тут іноді виходять па копичку менше, ніж правилом результат (наприклад, 14,9999 замість 15,00) – Пер

Маючи таку безліч числових даних, природним буде поставити собі питання: які з них використовувати і коли Відповідь проста: все залежить від ваших надобнтей Для наукових обчислень, швидше за все, потрібно буде використовувати тип double або float А для розрахунків іпотечного кредиту, ймовірно, буде потрібно застосування типу decimal Для виконання ж обчислень з множинами підійде тип int або long Все залежить від того, наскільки точний або до якої розрядності резулат ви хочете отримати

Точність числа є важливою темою, яку ніколи не слід розглядати поверхово Розглянемо це на прикладі перепису населення, з якої, крім загальної кількості населення, ми дізнаємося іншу цікаву інформацію Нрімер, в Канаді кількість розлучених людей становить 31% від усього населені Також, в Канаді частота народжуваності становить один новонароджений каую хвилину і 32 секунди На момент написання даної книги, населення Канади складає 32899736 чоловік Таким чином, на момент написання цієї книги в Канаді було 10164818 розведених людей Подумайте трохи про те, що було тільки що написано А було написано, що існує прямий взаємозвязок між кількістю розлучених людей і кількістю новонароджених Хіба це не ізітельно, що народжуваність й розлучення вимірюються з такою точністю і що саме 10164818 людей – не 10164819 або 10164820 – будуть розведеними Звичайно ж, цитування цих даних з такою точністю – всього лише спосіб привернути увагу до того, що ми всі постійно, можливо, не звертаючи на це свідомо уваги, зазвичай застосовуємо в таких ситуаціях – округлення чисел

Не можна сказати, що в саме 10164818 чоловік розлучаться, т к для цього неоодімо було б перерахувати дану категорію населення в даний момент Але можна сказати, 10164818 плюс-мінус 100 000 будуть розведеними Таким чином, діапазон розлучених буде від 10064818 до 10264818, або, грубо горя, 10,2 млн чоловік Насправді, саме число в форматі 10,2 і вжив би в газетній статті, науковій літературі або більшістю лей в розмові на цю тему Таким чином, якщо скласти 10,2 млн і 1000, МГО сказати, що ми отримаємо 10201000 Число 10,2 є округленням до блайшей десятого мільйона, а додається до нього число 1000 менше, ніж округлене число Тому число 1000 не можна додати до числа 10,2, т к число 1000 не є звичайним по відношенню до числа 10,2 Але число 1000 можна тиснути до числа 10164818, отримавши 10165818, т к найбільш значуща величина є одним цілим числом

Результатом додавання чисел 15 і 15 як цілих буде число 2 (рис 215) Поширимо концепцію на тип з плаваючою точкою, float, і розглянемо при-

заходів, показаний на рис 216

Як показано на рис 216, якщо ми хочемо зберегти точність при додаванні Меньков числа з великим, нам необхідно використовувати тип double Але навіть цей тип має свої обмеження і може представляти числа тільки з точністю від 15 до 16 цифр

Рис 216 Додавання дробових-чисел як чисел типу floa t

Якщо потрібно ще більш висока точність, використовується тип decimal, але цей тип більш підходить для виконання фінансових обчислень У фінансових Вісленев часто доводиться виконувати додавання дуже великих чисел з дуже маленькими Уявіть собі, що ви Білл Гейтс і у вас кілька мільярдів на банківському рахунку Коли банк нараховує відсотки, ви хочете знати, скільки центів у вас накопичилося, т к з цих центів протягом багатьох років накопичуються значні суми (Між іншим, були випадки, коли програмісти грабувала банки на досить великі суми, знімаючи частки цента з багатьох рахунків і перода їх на свій рахунок)

Тепер, коли ми в курсі деяких складнощів, супутніх роботі з числи, завершимо наш Калькулятор

Джерело: Гросс К С # 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>

*

*