Average Error: 0.0 → 0.0
Time: 3.4s
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 r1270445 = x_re;
        double r1270446 = y_im;
        double r1270447 = r1270445 * r1270446;
        double r1270448 = x_im;
        double r1270449 = y_re;
        double r1270450 = r1270448 * r1270449;
        double r1270451 = r1270447 + r1270450;
        return r1270451;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1270452 = x_im;
        double r1270453 = y_re;
        double r1270454 = r1270452 * r1270453;
        double r1270455 = x_re;
        double r1270456 = y_im;
        double r1270457 = r1270455 * r1270456;
        double r1270458 = r1270454 + r1270457;
        return r1270458;
}

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 2019146 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))