@Override
    public double membership(double x) {
        if (Double.isNaN(x)) {
            return Double.NaN;
        }
        double a = 1.0, b = 1.0;
        if (Op.isLt(x, meanA)) {
            a = Math.exp((-(x - meanA) * (x - meanA))
                    / (2.0 * standardDeviationA * standardDeviationA));
        }
        if (Op.isGt(x, meanB)) {
            b = Math.exp((-(x - meanB) * (x - meanB))
                    / (2.0 * standardDeviationB * standardDeviationB));
        }
        return height * a * b;
    }
@ Override public double membership ( double x ) { if ( Double . isNaN ( x ) ) { return Double . NaN ; } double a = 1.0 , b = 1.0 ; if ( Op . isLt ( x , meanA ) ) { a = Math . exp ( ( - ( x - meanA ) * ( x - meanA ) ) / ( 2.0 * standardDeviationA * standardDeviationA ) ) ; } if ( Op . isGt ( x , meanB ) ) { b = Math . exp ( ( - ( x - meanB ) * ( x - meanB ) ) / ( 2.0 * standardDeviationB * standardDeviationB ) ) ; } return height * a * b ; }
Computes the membership function evaluated at `x`

@param x
@return ` h \left((1 - i) + i \times \exp(-(x - \mu_a)^2 /
(2\sigma_a^2))\right) \left((1 - j) + j \times \exp(-(x - \mu_b)^2 / (2
\sigma_b)^2)\right)
`

where `h` is the height of the Term,
`\mu_a` is the mean of the first GaussianProduct,
`\sigma_a` is the standard deviation of the first GaussianProduct,
`\mu_b` is the mean of the second GaussianProduct,
`\sigma_b` is the standard deviation of the second GaussianProduct,
`i=\begin{cases}1 & \mbox{if $x \leq \mu_a$} \cr 0
&\mbox{otherwise}\end{cases}`,
`j=\begin{cases}1 & \mbox{if $x \geq \mu_b$} \cr 0
&\mbox{otherwise}\end{cases}`