2013-04-17 2 views
0

Я только что услышал что-то очень интересное, но не могу найти никаких ресурсов.
История состоит в том, что, столкнувшись с алгоритмической проблемой, которая требовала множественных ifs, один ученик друга ответил на математический один лайнер.
Mathematic resolution

Теперь я уже знал, что вы можете делать что-либо с математикой, но я хочу, чтобы это было возможно.
Из того, что я знаю, можно было бы сделать петлю, учитывая форму этой функции, но условия?

ли кто-нибудь знает, как решить что-то вроде:

IF boolean 
    THEN expression 
    ELSE expression2 

в математике условиях (без Bool алгебры)?

С наилучшими пожеланиями,

Sarfraz

+1

Вы не можете сделать это в общем случае. И взломы exp/log укусят вас, когда вы столкнетесь с ограниченной точностью и проблемами округления. – Antimony

+0

Кажется, этот вопрос лучше подходит для математики.SE. Модераторы, можем ли мы перенести вопрос? – blubb

+0

Я вижу, это правда, что я не рассматривал точность. – Sarfraz

ответ

2

Предполагая boolean либо 0 или 1, и выражение математическое:

expr = boolean * expression + (1-boolean) * expression2 
+0

Я был всего на несколько секунд медленнее :) – gtsouk

+0

@Sarfraz - Ваше постное состояние «использует экспоненциальные и логарифмы». Поскольку принятый ответ не использует ни один из них (но, вероятно, это тот ответ, который вы искали), можете ли вы отредактировать сообщение, чтобы более правильно указать, что искали? – mbeckish

+0

Выполнено, я удалил часть exp и log, поскольку она не была обязательной. – Sarfraz

1

При условии, что логическое значение 0 или 1:

result = boolean*expression+(1-boolean)*expression2 
1

Вы имеете в виду multiplexer?

Если булево является S, выражение А и выражение2 B, то формула для результата Z является

Z = (A * S) + (B * ^S)

+0

С быстрым взглядом он отвечает на вопрос с помощью булевых уравнений, которые не совсем то, что я ищу. – Sarfraz

+0

Как вы отредактировали ... – Sarfraz

+0

Это, конечно, то же, что и принятый ответ, за исключением того, что он немного больше. – flup