Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата
Вариант 2.
0<=x,z <= 2^15 -1 --> 0<=z&x<=2^15 -1
0<=y<=2^15 -1

Да,верно.
Есть еще вариант проверки вводимых данных динамически. После ввода, прежде чем перейти к вычислениям, проводишь проверку для конкретно введеных чисел. Удобнее "постаривать" у, потому что, если подстраивать x и z под у, то сначала их надо проверить между собой, то есть на одну проверку больше. Но я не знаю твоего задания, может сначало надо вводить у и под него подстраивать x и z.

Автор: powerfox 28.10.2006, 19:38
anwe, 
Цитата(anwe @  28.10.2006,  20:12 Найти цитируемый пост)
Но я не знаю твоего задания, может сначало надо вводить у и под него подстраивать x и z.

Задание - вычислить Rez, считав x,y,z с памяти, никакой проверки не сделать (нет команд, это "урезанный" асм). Нужно написать, с какими x,y,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
Цитата(anwe @  28.10.2006,  23:07 Найти цитируемый пост)
Не понял вопроса. Числа верные в том смысле, что каждое из них не выходит за пределы слова, но условия не  верны, ведь нет гарантии, что результат будет размером в слово.

В том смысле, что при 
0<=z,x<=2^16 -1
y = 0   

Будет: -2^15 <= x&z <= 2^15 -1
И результат влезет в  [-2^15; 2^15 -1]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)