Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Избежать Булевой алгебры |
Автор: _Y_ 27.9.2014, 13:46 |
Возникла такая нетривиальная задача. Надо написать формулу, не применяя Булевых операторов - только арифметика/алгебра. Имеются две величины а и b. Надо написать математическую функцию f(a,b), растущую с ростом каждой величины, как, например a+b или sqrt(a*a+b*b), но принимающую значение ноль в случаях если a или b или оба они отрицательны. При этом булевы условия задавать нельзя. |
Автор: Pavia 27.9.2014, 14:31 |
(1+a/abs(a))*(1+b/abs(b)) |
Автор: _Y_ 27.9.2014, 16:30 |
Pavia, спасибо. Это, почти решает задачу. Но есть одна проблема. Если один из аргументов принимает значение ноль возникает неопределенность. А вот неопределенности мне необходимо избегать. |
Автор: Pavia 27.9.2014, 16:40 |
_Y_, sign() -можно использовать? CrossProduct использовать можно? |
Автор: _Y_ 27.9.2014, 16:46 |
По-моему sign() это функция просто прячущая внутри себя операторы сравнения. Так что использовать ее нельзя. С CrossProduct я как-то не сталкивался (ну или не помню). Инет говорит о векторах и трехмерном пространстве. Даже и не знаю каким концом (в трехмерном пространстве) эта функция сюда подходит. |
Автор: Dremuk 27.9.2014, 22:04 |
(1+a/abs(a))*(1+b/abs(b)) - не является растущей. Это набор констант Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Izbezhat-Bulevoy-algebry-id542695e4ae20153c1e8b4567#findElement_E7045_54270a23ae201568632d0b08_0 |
Автор: Dremuk 27.9.2014, 22:05 |
0 или 2 Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Izbezhat-Bulevoy-algebry-id542695e4ae20153c1e8b4567#findElement_E7045_54270a6fae2015cb6c2d0968_0 |
Автор: Dremuk 27.9.2014, 22:05 |
вернее не 2 а 4 Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Izbezhat-Bulevoy-algebry-id542695e4ae20153c1e8b4567#findElement_E7045_54270a7dae2015676a2d09ed_0 |
Автор: Dremuk 27.9.2014, 22:06 |
по-моему таких функций нет Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Izbezhat-Bulevoy-algebry-id542695e4ae20153c1e8b4567#findElement_E7045_54270abfae2015b5552d0e73_0 |
Автор: maxim1000 1.10.2014, 10:54 |
(a+abs(a))*(b+abs(b)) |
Автор: _Y_ 1.10.2014, 21:28 |
maxim1000, О! Именно оно. Кстати, еще днем нашел дургой вариант того же: (a+sqrt(a*a))*(b+sqrt(b*b)) |