code: @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;
      }
docs: 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}`