#define sigmoid(x) (1/(1+exp(-x))) #define sigmoid_deriv(x) (1/((1+exp(-x))*(1+exp(x)))) #define soft_not(x) (1-(x)) #define soft_and(x, y) ((x)*(y)) #define soft_or(x,y) (1-(1-(x))*(1-(y))) #define soft_greater(x,y,delta) (sigmoid(((x)-(y))/(delta))) #define soft_less(x,y,delta) (sigmoid(((y)-(x))/(delta))) float soft_equal(float x, float y, float delta){ float z = (x-y)/delta; return exp(-z*z); } float soft_if(float p, float x, float y){ return p*x + (1-p)*y; } Vector soft_if_vector(float p, Vector x, Vector y){ Vector v = p*x + (1-p)*y; return v; }