Average Error: 17.7 → 0.1
Time: 2.9s
Precision: 64
\[\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}\]
\[\begin{array}{l} \mathbf{if}\;u \le -27961452653556097000 \lor \neg \left(u \le 1.74032055719243231 \cdot 10^{-26}\right):\\ \;\;\;\;\frac{\left(-t1\right) \cdot \frac{v}{t1 + u}}{t1 + u}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1 \cdot v}{\frac{t1 + u}{t1} \cdot \left(t1 + u\right)}\\ \end{array}\]
\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}
\begin{array}{l}
\mathbf{if}\;u \le -27961452653556097000 \lor \neg \left(u \le 1.74032055719243231 \cdot 10^{-26}\right):\\
\;\;\;\;\frac{\left(-t1\right) \cdot \frac{v}{t1 + u}}{t1 + u}\\

\mathbf{else}:\\
\;\;\;\;\frac{-1 \cdot v}{\frac{t1 + u}{t1} \cdot \left(t1 + u\right)}\\

\end{array}
double code(double u, double v, double t1) {
	return ((-t1 * v) / ((t1 + u) * (t1 + u)));
}
double code(double u, double v, double t1) {
	double VAR;
	if (((u <= -2.7961452653556097e+19) || !(u <= 1.7403205571924323e-26))) {
		VAR = ((-t1 * (v / (t1 + u))) / (t1 + u));
	} else {
		VAR = ((-1.0 * v) / (((t1 + u) / t1) * (t1 + u)));
	}
	return VAR;
}

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. Split input into 2 regimes
  2. if u < -2.7961452653556097e+19 or 1.7403205571924323e-26 < u

    1. Initial program 14.3

      \[\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}\]
    2. Using strategy rm
    3. Applied times-frac1.0

      \[\leadsto \color{blue}{\frac{-t1}{t1 + u} \cdot \frac{v}{t1 + u}}\]
    4. Using strategy rm
    5. Applied associate-*r/1.0

      \[\leadsto \color{blue}{\frac{\frac{-t1}{t1 + u} \cdot v}{t1 + u}}\]
    6. Simplified0.2

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

    if -2.7961452653556097e+19 < u < 1.7403205571924323e-26

    1. Initial program 21.3

      \[\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}\]
    2. Using strategy rm
    3. Applied times-frac1.6

      \[\leadsto \color{blue}{\frac{-t1}{t1 + u} \cdot \frac{v}{t1 + u}}\]
    4. Using strategy rm
    5. Applied neg-mul-11.6

      \[\leadsto \frac{\color{blue}{-1 \cdot t1}}{t1 + u} \cdot \frac{v}{t1 + u}\]
    6. Applied associate-/l*1.6

      \[\leadsto \color{blue}{\frac{-1}{\frac{t1 + u}{t1}}} \cdot \frac{v}{t1 + u}\]
    7. Using strategy rm
    8. Applied frac-times0.1

      \[\leadsto \color{blue}{\frac{-1 \cdot v}{\frac{t1 + u}{t1} \cdot \left(t1 + u\right)}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;u \le -27961452653556097000 \lor \neg \left(u \le 1.74032055719243231 \cdot 10^{-26}\right):\\ \;\;\;\;\frac{\left(-t1\right) \cdot \frac{v}{t1 + u}}{t1 + u}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1 \cdot v}{\frac{t1 + u}{t1} \cdot \left(t1 + u\right)}\\ \end{array}\]

Reproduce

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