|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 31, 2004 20:05:08 Вот вам небольшое упражнение: Есть четыре арифметических действия и функции max и min. Причем при выполнении деления на ноль возникает ошибка. Требуется построить выражение, которое даст 1 если x=0 и 0 если x<>0. И еще одно выражение, которое даст 1 если x>=0 и 0 если x<0. |
|
|
Дата: Июл 31, 2004 20:14:38 Я правильно понимаю "при помощи арифметических" означает логических и арифметических? Что включает лог\ар операции но исключает jcc, movcc и setcc? Или логические тоже исключаются? Арифметические операции с флагом adc sbb - как насчёт них? И второй вопрос x - знаковый или беззнаковый? |
|
|
Дата: Июл 31, 2004 20:40:17 Вопрос о беззнаковости снимается - проглядел условия :) |
|
|
Дата: Июл 31, 2004 22:37:26 The Svin Под четырьмя арифметическими действиями я имел ввиду сложение, вычитание, умножение и деление. И еще есть функции max и min от произвольного числа аргументов (на случай если кому-то понадобится более чем с двумя аргументами 8). Ну еще можно считать что мы можем строить свои функции из этих базовых операций. Задача математическая, так что про ассемблер лучше забыть 8) У меня пока получилось построить только такую функцию: f(x)=0 x<=0 f(x)=x 0<x<1 f(x)=1 x>=1 Можно конечно подставить x/inf, но это получается приближенное решение да еще совсем не пригодное для вычислений. |
|
|
Дата: Авг 1, 2004 00:18:32 · Поправил: Valery Если я чего не перепутал то первый вопрос так: |x-y| = max(x-y,y-x) |x| = |x-0| sg x = max(0,min(1,|x|)) sg'x = 1-sg x |
|
|
Дата: Авг 1, 2004 00:24:46 Ой извини не просек что числа вещественные. Отменяется, sg не пройдет :(( |
|
|
Дата: Авг 1, 2004 01:34:43 Модули я понял тоже нельзя? С ними намного проще, или иначе с abs\nabs. С логикой или\и проверкой условий вообще очень просто и коротко. Чтобы поддержать топик первое неоптимальное но валидное(из того что я понял) решение abs=max(x*1,x*(-1)) (x:max(1,abs(x)))-1)*(-1) |
|
|
Дата: Авг 1, 2004 01:53:19 Не написал для чего, но наверно понятно :) if x = 0 fun(x)=1 else fun(x)=0 max(x*1 .. написано для наглядности, понятно при вычислении это просто max(x,x*(-1)) |
|
|
Дата: Авг 1, 2004 04:25:13 Что-то мне кажется что такую функцию построить неполучится: функции min и max разрывов имеют не больше чем имеют функции аргументы, а разрыв в функции f(x)=1/x бесконечный и сделать его конечным по моему не получится. Хотя функция s(x)=x/(max(x,-x)+a) при a->0 становится все более похожей на функцию sign(x), но это опять приближенное решение, к тому же не этой задачи 8( |
|
|
Дата: Авг 1, 2004 04:28:52 · Поправил: Black_mirror The Svin Я забыл в условии написать что числа вещественные. А для целых чисел решение правильное 8) |
|
|
Дата: Авг 1, 2004 11:42:12 А почему неподходит для вещественных? Там только умножение на -1, деление на x/x если x > 0, вычитание 1 из 1 или 0. В чём тут проблема с вещественными? Как операция вызовет проблемы? x/x при x<>0? Это единственная операция ни с нулём и единицей и она даст 1. |
|
|
Дата: Авг 1, 2004 16:06:53 The Svin По моему график будет выглядеть так: ___/\___ В формуле не хвататет одной скобки и я думаю что скобка должна быть здесь: ((x:max(1,abs(x)))-1)*(-1) |
|
|
Дата: Авг 1, 2004 16:07:34 Svin, замечание вероятно адресовано мне. |
|
|
Дата: Авг 1, 2004 16:14:32 Valery К Svin'у тоже относится, у него точно такая же функция получается. А max здесь не нужен: sg x = max(0,min(1,|x|)) |
|
|
Дата: Авг 1, 2004 18:04:24 В формуле не хвататет одной скобки и я думаю что скобка должна быть здесь: ((x:max(1,abs(x)))-1)*(-1) Да, так должно быть. По моему график будет 1 __|__ 0 При x <> 0 x/x будет = 1 и после вычитания 1 - нулю. Умножение на -1 не изменит ничего. А при x = 0 будет 0:1=0 и -1 после вычитания 1 далее -1*-1=1 Чего я недопонимаю? Тут либо min\max перестаёт работать на каких то пределах при стремлении вещественного (представим как x\y) к нулю либо если он работает при любом малом x и y в x\y то и умножение на -1 и деление (x:y)\(x:y) не вызывает проблем. Дихотомия. Т.е. если ты допускаешь min\max при любом x то автоматически допускаешь x\x=1 при любом x <> 0. Дальше то вообще (при возможном делении x\x при x<>0) происходит работа с единицей и нулём причём без делений. И численный алгоритм в моей функции другой чем у Валерия - я использую деление. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.151 |