| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > помогите подобрать диапозоны для чисел |
| Автор: powerfox 28.10.2006, 16:31 |
| Привет. Нужна помощь в проверке значений чисел. Есть 16 бит для каждого числа, причём z,x - логические величины (старший бит под знак не используется), а Rez,y, z&x - fhbavtnbxtcrbt (сто знаком). Rez=y - (z&x) z&x = c Вариант 1. 0<=z,x<=2^16 -1 ---> -2^15 <= x&z <= 2^15 -1 По-моему, y здесь может быть только 0, иначе возможен вариант переполнения: y=-10, а c = 2^15 -1. y - c < -2^15 - переполнение. Или y = 1, а с = -2^15 -1 - тоже переполнения. Вариант 2. 0<=x,z <= 2^15 -1 --> 0<=z&x<=2^15 -1 0<=y<=2^15 -1 По-моему, верно. Очень важно, чтобы в этих вариантах не было ошибок. |
| Автор: anwe 28.10.2006, 19:12 | ||
Да,верно. Есть еще вариант проверки вводимых данных динамически. После ввода, прежде чем перейти к вычислениям, проводишь проверку для конкретно введеных чисел. Удобнее "постаривать" у, потому что, если подстраивать x и z под у, то сначала их надо проверить между собой, то есть на одну проверку больше. Но я не знаю твоего задания, может сначало надо вводить у и под него подстраивать x и z. |
| Автор: anwe 28.10.2006, 20:23 |
| Ну я и сказал, что не знаю твоего задания. Тогда второй варинт верный и все тут. |
| Автор: powerfox 28.10.2006, 21:51 |
| А первый? Он не имеет смысла, но числа верные же? |
| Автор: anwe 28.10.2006, 22:07 | ||
Не понял вопроса. Числа верные в том смысле, что каждое из них не выходит за пределы слова, но условия не верны, ведь нет гарантии, что результат будет размером в слово. |
| Автор: powerfox 28.10.2006, 22:19 | ||
В том смысле, что при 0<=z,x<=2^16 -1 y = 0 Будет: -2^15 <= x&z <= 2^15 -1 И результат влезет в [-2^15; 2^15 -1] |