C#

Рекламный модуль
стандартные пластиковые окна киев недорого

Проверка суммирования двух очень больших чисел

Код и проекты организованы, но мы пропустили некоторые проверки. Нынешняя проверка суммирует два простых числа. Но можно было бы просуммировать два дей¬ствительно больших числа, например 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 (). Если вы знакомы с любыми другими языками программирования, то проблема различных числовых типов данных вам вероятно уже знакома. Давайте рассмотрим эту "игру чисел", если вам интересно.