예제 #1
0
  @Override
  public O compute(I1 z1, I2 z2, O output) {
    /*
      optimized version (fewer multiplies) : from mathworld.com
        seems to exhibit some rounding differences from textbook algorithm

    double a = z1.getRealDouble();
    double b = z1.getImaginaryDouble();
    double c = z2.getRealDouble();
    double d = z2.getImaginaryDouble();

    double ac = a*c;
    double bd = b*d;

    double x = ac - bd;
    double y = (a + b)*(c + d) - ac - bd;
    */

    // textbook version : works
    double x =
        z1.getRealDouble() * z2.getRealDouble() - z1.getImaginaryDouble() * z2.getImaginaryDouble();
    double y =
        z1.getImaginaryDouble() * z2.getRealDouble() + z1.getRealDouble() * z2.getImaginaryDouble();

    output.setComplexNumber(x, y);
    return output;
  }
예제 #2
0
  @Override
  public O compute(I1 x1, I2 x2, O output) {
    output.setReal(x1.getRealDouble() - x2.getRealDouble());

    return output;
  }
예제 #3
0
 @Override
 public O compute(I1 x1, I2 x2, O output) {
   double value = (long) x1.getRealDouble() & (long) x2.getRealDouble();
   output.setReal(value);
   return output;
 }