Проверка суммирования двух очень больших чисел
Код и проекты организованы, но мы пропустили некоторые проверки. Нынешняя проверка суммирует два простых числа. Но можно было бы просуммировать два дей¬ствительно больших числа, например 2 миллиарда и 2 миллиарда.
Код, проверяющий сумму двух действительно больших чисел, показан на рис. 2.11. Добавьте его в файл Program, cs проекта TestCalculator.
Проверка суммирования двух очень больших чисел идентична проверке суммирова¬ния двух обычных чисел, если бы не сами числа. Сообщение об ошибке создается не¬много иначе, чем в предыдущем коде, здесь использован метод конкатенации. Для этого строка конкатенируется с целым числом и еще одной строкой. Язык С# автоматически преобразует целое число в строку.
Зачастую вы будете создавать проверки, единственное реальное отличие которых заключается в самих данных. Вы полагаете, что между суммированием двух очень больших {2 миллиарда плюс 2 миллиарда) и двух меньших чисел (2 плюс 2) нет ника¬кой разницы? Для людей нет, поскольку для них главное различие между 2 миллиар¬дами и 2 лишь в количестве нулей; результат будет 4 миллиарда или 4, это кажется тривиальным. Но для компьютера 4 миллиарда существенно отличается от 4, как вы скоро увидите.
Прежде чем вы запустите проверку, необходимо добавить ее вызов в метод Main ().
static void Main(string[] args) {
TestSimpleAddition();
TestReallyBigNumbers();
Теперь запустите проверку большого числа. Вы увидите следующий вывод:
Error found(-294967296) should have been (4869586958695)
Это означает, что произошла ошибка, и что суммирование 2 000 000 000 с 2 000 000 000 дало результат -294 967 296, что не имеет смысла с точки зрения чело¬веческой логики. Что же произошло? Проблема связана с типами чисел (int), исполь¬зованных при объявлении метода Add (). Если вы знакомы с любыми другими языками программирования, то проблема различных числовых типов данных вам вероятно уже знакома. Давайте рассмотрим эту "игру чисел", если вам интересно.