# "Algebraic" IF Statement Evaluation

• posted

I need to evaluate...

IF(t,1,0) (If t is true, output 1, if t is false, output 0 (numeric), t may be something like V11 >= 7, for example)

BUT I have no IF statement handling capability at this level of a simulation.

I do have algebraic capability.

Is there some cute way to do this algebraically?

...Jim Thompson

```--
| James E.Thompson, P.E.                           |    mens     |
• posted

X=int(V11/7) X/X

• posted

gah! messed that up :S

• posted

(abs(V11-7))/(V11-7) will be +1 for V11>7, -1 for V11

• posted

t=X/X

This will sorta work, but if x is 0 then you'll probably get errors, to a human it's the 0/0 = 1 thing not having used your emulator I can't be sure what'll happen of how to treat an error like this.

• posted

I don't have INT available, I do have ABS and some trig functions

...Jim Thompson

```--
| James E.Thompson, P.E.                           |    mens     |
• posted

That's what I came up with, except I inserted a small "delta" (smaller than my step size) to avoid 0/0. I was hoping for something more compact :-(

...Jim Thompson

```--
| James E.Thompson, P.E.                           |    mens     |
• posted

Do you have a unit step function (u(x)) available?

```--
Paul Hovnanian  paul@hovnanian.com
----------------------------------------------------------------------```
• posted

I don't have function SGN :-(

...Jim Thompson

```--
| James E.Thompson, P.E.                           |    mens     |
• posted

(1+sgn(V11-7))/2 ?

• posted

y = V11 -7

(abs(y) + y)/(2*y)

• posted

P.S. If you want avoid awkward situations very near y == 0 you could do

(abs(y) + y)/(2* abs(y) + e)

where e is a very small positive number

• posted

are there any operators or functions that can give a different mumeric result depending on the truth of the input.

many systems have false as 0 and true as 1 (or less common -1)

else maybe something like (sgn( sgn(V11-7) *2 +1 ) + 1 ) /2

• posted

ABS has an intrinsic "if" that can do it. Spehro showed the method.

• posted

Use PostScript for your simulation, of course.

with t on stack, {1}{0} ifelse

```--