Average Error: 18.8 → 1.2
Time: 14.3s
Precision: 64
\[\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}\]
\[\frac{v \cdot \left(t1 \cdot \frac{-1}{t1 + u}\right)}{t1 + u}\]
\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}
\frac{v \cdot \left(t1 \cdot \frac{-1}{t1 + u}\right)}{t1 + u}
double f(double u, double v, double t1) {
        double r21647 = t1;
        double r21648 = -r21647;
        double r21649 = v;
        double r21650 = r21648 * r21649;
        double r21651 = u;
        double r21652 = r21647 + r21651;
        double r21653 = r21652 * r21652;
        double r21654 = r21650 / r21653;
        return r21654;
}

double f(double u, double v, double t1) {
        double r21655 = v;
        double r21656 = t1;
        double r21657 = -1.0;
        double r21658 = u;
        double r21659 = r21656 + r21658;
        double r21660 = r21657 / r21659;
        double r21661 = r21656 * r21660;
        double r21662 = r21655 * r21661;
        double r21663 = r21662 / r21659;
        return r21663;
}

Error

Bits error versus u

Bits error versus v

Bits error versus t1

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 18.8

    \[\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}\]
  2. Simplified16.6

    \[\leadsto \color{blue}{\frac{t1}{\left(u + t1\right) \cdot \left(t1 + u\right)} \cdot \left(-v\right)}\]
  3. Using strategy rm
  4. Applied distribute-rgt-neg-out16.6

    \[\leadsto \color{blue}{-\frac{t1}{\left(u + t1\right) \cdot \left(t1 + u\right)} \cdot v}\]
  5. Simplified1.1

    \[\leadsto -\color{blue}{\frac{v \cdot \frac{t1}{t1 + u}}{t1 + u}}\]
  6. Using strategy rm
  7. Applied div-inv1.2

    \[\leadsto -\frac{v \cdot \color{blue}{\left(t1 \cdot \frac{1}{t1 + u}\right)}}{t1 + u}\]
  8. Final simplification1.2

    \[\leadsto \frac{v \cdot \left(t1 \cdot \frac{-1}{t1 + u}\right)}{t1 + u}\]

Reproduce

herbie shell --seed 2019196 +o rules:numerics
(FPCore (u v t1)
  :name "Rosa's DopplerBench"
  (/ (* (- t1) v) (* (+ t1 u) (+ t1 u))))