|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrew Ezhguroff 2:5020/400 04 Dec 2001 06:39:06 To : Sashka Yackubtchick Subject : Re: максимум двух чисел без сравнения -------------------------------------------------------------------------------- Привет! "Sashka Yackubtchick" <Sashka.Yackubtchick@p54.f29.n5054.z2.fidonet.org> сообщил(а) нам: > Видимо имеется ввиду формат IEEE. > Тут автор письма несколько туманно обошёл сложности в контексте работы > с данным форматом с целью сабжа. > Дело в том что непосредственно работая с этим форматом в FPU нельзя > использовать стандартные для целочисленных команд и регистров логические > команды AND и OR которые обычно применяются для установки и обнуления бита. Да, используя команды FPU, нельзя работать с битами. Hо любое значение можно рассматривать как массив байтов (в Паскале - записи с вариантами, в C/C++ - union, или адресная арифметика) и спокойно манипулировать любыми битами. > Hо, в FPU можно просто вызвать команду fabs которая преобразует значение > в регистре в абсолютное. Я говорю о том, как решить задачу на ЯВУ без привлечения ассемблера. > Можно конечно обнулить бит и непосредственно в памяти, но если нам нужно > вернуть MAX не изменив сами переменные то в данном случае мы нарушим это > условие. В чем проблема? - Определяешь функцию ABS с передачей параметра по значению. > Сейчас пусть этого достаточно в формате IEEE. Hо мы не можем этого > сделать непосредственно в регистре сопроцессора. А зачем это делать в регистре? > Получается мы можем сделать это только в памяти, но тогда мы "испортим" > переменную. Получается что мы должны будем создать две временные переменные, > загрузить в них реальные переменные (это одной командой неполучится, конкретная > скорость такого перемещения будет зависить от размера вещественого типа - он > может быть от 4х до 10и байт). Зачем ДВЕ временные переменные для ОДHОЙ операции ABS? И причем здесь скорость - ты исходные условия задачи видел? > Только после этого мы можем во временых > переменных обнулить байт и загрузить их в FPU для последующих операций. Обнуляется все же не байт, а бит - самый левый. > С другой стороны в реальной жизни делать это с веществеными типами не нужно - > все известные мне сопроцессоры имеют команду abs которая как раз этим и > занимается. Разумеется не нужно. Hо здесь мы имеем учебную задачу на сообразительность, а не на максимальную оптимизацию. :-) С уважением, Андрей. --- ifmail v.2.15dev5 * Origin: COMSTAR Telecommunications (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/12168114d779a.html, оценка из 5, голосов 10
|