Average Error: 0.0 → 0.0
Time: 3.3s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1712551 = x_re;
        double r1712552 = y_im;
        double r1712553 = r1712551 * r1712552;
        double r1712554 = x_im;
        double r1712555 = y_re;
        double r1712556 = r1712554 * r1712555;
        double r1712557 = r1712553 + r1712556;
        return r1712557;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1712558 = x_im;
        double r1712559 = y_re;
        double r1712560 = r1712558 * r1712559;
        double r1712561 = x_re;
        double r1712562 = y_im;
        double r1712563 = r1712561 * r1712562;
        double r1712564 = r1712560 + r1712563;
        return r1712564;
}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

    \[x.re \cdot y.im + x.im \cdot y.re\]
  2. Final simplification0.0

    \[\leadsto x.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019163 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))