code: @Override
      protected final long evaluateAsLongPrimitive(IPidEvaluationArguments<NUMERICTYPE, INTEGRATOR_ARGS_TYPE, DIFFERENTIATOR_ARGS_TYPE> evaluationArguments) {
          // use long primitive via string conversion (which does not contain any
          // loss of precision)
          NUMERICTYPE errorSignal = evaluationArguments.getErrorSignalValue();
          long controlOuput = 0l;
          controlOuput += kp.longValue() * errorSignal.longValue();
          controlOuput += ki.longValue() * i.integrate(evaluationArguments.getIntegratorEvaluationArgs(), errorSignal).longValue();
          controlOuput += kd.longValue() * d.differentiate(evaluationArguments.getDifferentiatorEvaluationArgs(), errorSignal).longValue();
          return controlOuput;
      }
docs: PID entirely.