|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2011, 00:29 | #1 |
Пользователь
Регистрация: 26.10.2011
Сообщений: 49
|
Циклы. Арифметическое переполнение.
Добрый вечер, единомышленники. Возникла такая ситуация, есть задачка:
"Вычислить произведение натуральных чисел на отрезке от a до b, кратных числу k" Проблема в том что если указать большой диапазон например 1 - 100 и кратность к=2 то выскакивает ошибка 215. Арифметическое переполнение. Если диапазон 1-10 к примеру, то все нормально (вроде)... Я сомневаюсь в правильности выполнения. Проверьте пожалуйста. Код:
Everybody lies.
|
09.11.2011, 00:33 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Тип integer в досовом паскале имеет размер 16 бит, соответсвенно, самое большое положительное число, которое можно в него записать = 32767.
> например 1 - 100 и кратность к=2 Вы, надеюсь, догадываетесь, хоть примерно, сколько будет нулей у произведения всех этих чисел? Тут вас Real только спасёт, ну или длинная арифметика.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 09.11.2011 в 00:38. |
09.11.2011, 00:39 | #3 | |
Пользователь
Регистрация: 26.10.2011
Сообщений: 49
|
Цитата:
Everybody lies.
|
|
09.11.2011, 00:53 | #4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
ну, более-менее вроде правильно, на первый взгляд. Только не мешало бы k на равенство 0 проверить.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
09.11.2011, 01:04 | #5 | |
Пользователь
Регистрация: 26.10.2011
Сообщений: 49
|
Цитата:
Главное чтобы условие задачи чётко выполнилось
Everybody lies.
|
|
09.11.2011, 01:18 | #6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
если чисел, кратных k нет, ваша программа спокойно выведет, что их произведение якобы равно 1.
если k = 0, ваша программа вобще не сможет разумно завершиться. не говоря уже о переполнении при первой же возможности. Я бы не назвал это "чётким выполнением условия задачи"
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 09.11.2011 в 01:21. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
переполнение буфера | Dimarik | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 13.07.2011 02:24 |
Арифметическое переполнение | hasana | Помощь студентам | 2 | 04.11.2010 18:08 |
Переполнение деления!!! | zero-cool | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 28.09.2010 21:10 |
Переполнение стека | Ake | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 30.05.2009 22:39 |
Переполнение Стека | Викдон | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 19.12.2008 19:16 |