Average Error: 0.0 → 0.0
Time: 1.1s
Precision: 64
\[x.re \cdot y.re - x.im \cdot y.im\]
\[x.re \cdot y.re - x.im \cdot y.im\]
x.re \cdot y.re - x.im \cdot y.im
x.re \cdot y.re - x.im \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r52153 = x_re;
        double r52154 = y_re;
        double r52155 = r52153 * r52154;
        double r52156 = x_im;
        double r52157 = y_im;
        double r52158 = r52156 * r52157;
        double r52159 = r52155 - r52158;
        return r52159;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r52160 = x_re;
        double r52161 = y_re;
        double r52162 = r52160 * r52161;
        double r52163 = x_im;
        double r52164 = y_im;
        double r52165 = r52163 * r52164;
        double r52166 = r52162 - r52165;
        return r52166;
}

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.re - x.im \cdot y.im\]
  2. Final simplification0.0

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

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  :precision binary64
  (- (* x.re y.re) (* x.im y.im)))