Понятие проблем с числовыми значениями и типами
Что под числом понимаете вы и что "понимает" компьютер? Совершенно разные вещи. Еще ребенком вы, вероятно, учились считать от 1 и до 100, что вы считали ги¬гантским числом. Когда вы подросли, вы узнали о существовании нуля и чисел меньше нуля, а затем узнали о дробях и десятичных значениях.
Из полученного в ходе обучения опыта вы знаете, что 1 и 1,5 — это числа одного типа. Но для компьютера это значения отнюдь не того же типа.
Причина различия компьютерных чисел связана с эффективностью их обработки и хранения. Используя десятичную систему с разрядами, вы начинаете счет с 0 до 9, а затем переходите к следующему десятичному регистру, т.е. к 10. Поскольку компьютер использует двоичную систему счисления, лишь с двумя уникальными идентификатора¬ми 1 и 0, он переходит к следующему регистру иначе.
На рис. 2.12 показан пример того, как компьютер считал бы до 7, используя двоич¬ную систему.
В теории вы могли бы считать хоть до конца света. У вас есть эта возможность по¬тому, что вы человек и не имеете никаких ограничений в подсчетах. Компьютер огра¬ничения имеет, у него небезграничная память (RAM), емкость жесткого диска и т.д. Числовые типы данных, определенные на компьютере, также имеют пределы по мак¬симальным значениям, которые они могут содержать. Целое число, тип int, использо¬ванное в нашем примере, также может хранить лишь определенное значение, причем только целое.
Рассматривайте различные числовые типы данных как счетчики. Автомобильные счетчики километража имеют верхний предел в 1 000 000 километров. Представьте сумму 900 000 и 200 000 на счетчике. Результат будет 100 000, а не 1,1 миллиона кило¬метров. Это именно та проблема, с которой мы столкнулись при суммировании 2 мил¬лиардов и 2 миллиардов.
Недостаток счетчика в том, что вы иногда не знаете, когда он перескочит нулевое значение. Вы могли бы полагать, что автомобильный счетчик считает до 100 000 ки¬лометров, но фактически он способен посчитать и до 1,1 миллиона. К счастью, среда .NET знает предел числовых типов. На техническом жаргоне эта ситуация называется //////////////// ///////////////// /////////////// ////////////// ////////////// ///////////////// ///////////// /////////// /////////////// ///////////// //////////// добавить текст!!!!!!!! //////////////// ///////////////// /////////////// ////////////// ////////////// ///////////////// ///////////// /////////// /////////////// ///////////// ////////////
Вероятность переполнения — это проблема, а тот факт, что среда .NET способна справляться с ней, — это хорошо. Однако было бы желательно все же найти способ до¬бавить к 2 миллиардам 2 миллиарда. Билл Гейтс, вероятно, предпочел бы увидеть на своем банковском счете 4 миллиарда, вместо некого отрицательного значения или сооб¬щения об ошибке, указывающей на потерю данных в связи с переполнением регистра.