· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Выполнимо ли условие?

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Авг 17, 2004 11:00:30

cresta
Ну хорошо, тогда конкретно так:
1) Eсть y=(2^32-1)*sin(x), и a=(2^32-1)*cos(b).Как правильно сравнить y и a ?


Для полноты картины неплохо было бы их округлить :)

Допустим, мы так и сделали.
Так как и sin и cos дают нам значения в интервале [-1;+1],
следовательно, и y, и a могут принимать как положительные, так и отрицательные значения.
Следовательно, они должны быть знаковыми.
Однако в этом случае получится, что числа меняются в интервале -232-1..+232-1, то есть им требуется 33 бита.
Вывод: если можно изменить формулу, меняем её (делаем 231-1).
Если нельзя - используем 64-битные операции.
Если таковые отсутствуют, реализуем их программно.


Дата: Авг 17, 2004 14:53:32

letopisec

То, что ты вычитал - не показатель. Посмотри на то что показывает отладчик:
    0040120D  |. B8 FFFFFFFF    MOV EAX,-1   ;mov eax,4294967295 
    00401212  |. B8 FFFFFFFF    MOV EAX,-1   ;mov eax,-1


„и кста, FFFFFFFF - это тоже число“
Ясно дело, число. Его десятичный аналог 4294967295. А то, что мы видим в отладчике - это не число. Это то, как некоторое число себе представляет процессор. Имея строку B8 FFFFFFFF, нельзя однозначно ответить на вопрос: что создало эту строку: mov eax,4294967295 или mov eax,-1.


Дата: Авг 18, 2004 08:32:59 · Поправил: letopisec

Зри в корень cresta.

Для восьмиразрядного знакового числа -1 представление в дополнительном коде FF, для 16 разрядного -1 это FFFF, а для 33 разрядного 1FFFFFFFF. А то что мы видим в отладчике cresta, это именно число не надо ля-ля.


Дата: Авг 18, 2004 19:00:33

letopisec

А ты возьми обычный настольный калькулятор, а ещё лучше лист бумаги и ручку, да умножь цифру 2 саму на себя 32 раза и посмотри, какое-же число получится?


Дата: Авг 18, 2004 19:08:21

Да, и ещё: подумай, какая разница между 33-мя разрядами и 33-мя битами. И когда поймешь, то будет тебе счастие.


Дата: Авг 19, 2004 08:51:59 · Поправил: leo

Мужики, вам не надоело переливать из пустого в порожнее ?

Вопрос то элементарный: о диапазоне однозначного представления чисел при ограниченном числе двоичных разрядов. Если мы работаем с 32-разрядными числами, то для гарантии правильного результата мы должны быть уверены в том, что в итоге арифметических операций мы не выйдем за диапазон:
1) 0..4294967295 если все числа заведомо положительные или
2) -2147483648..+2147483647 если числа могут быть и положительными и отрицательными.
Причем здесь имеются в виду не только исходные числа, но и результаты операций: если мы используем вычитание положительных чисел, то результат может быть отрицательным.
Иначе возможно переполнение и => неверный результат. Например:
mov eax,4294967295
inc eax
получим eax = 0 , а не 4294967296 как на калькуляторе.
Не уверен - используй вещественные числа, int64 (EDX:EAX или MMX), или Int128 (XMM). Иначе жди "сюрпризов", которые вы тут столько времени мусолите.


Дата: Авг 19, 2004 09:09:36

cresta > „какая разница между 33-мя разрядами и 33-мя битами“

Да, а какая между ними разница? Если число двоичное, то один бит - это один разряд.
Если шестнадцатеричное - то один разряд - 4 бита.
Но это в нашем "высокоуровневом" понимании происходит такое разделение.
Для ALU все числа одинаковы, он работает с 33 разрядными двоичными числами (DWORD + CF).
Десятичные же числа - это вообще чисто человеческая выдумка.
Процессор не знает команды printf !


Дата: Авг 19, 2004 09:51:20 · Поправил: leo

S_T_A_S
>„Для ALU все числа одинаковы, он работает с 33 разрядными двоичными числами (DWORD + CF).
Десятичные же числа - это вообще чисто человеческая выдумка.“


Ты слишком категоричен. ALU поддерживает обработку binary-coded decimal integers (BCD), упаковнных и неупакованных. Для неупакованных: один байт = одной десятичной цифре, для упакованных = двум десятичным цифрам. Вот только вопрос кто сейчас этим пользуется.


Дата: Авг 19, 2004 22:41:29

Дык пусть поддерживает. Всё равно это реализовано на базе одной схемы.
Добавили цепи в сумматоре для учёта чисел больше 1010b и усё.

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.083