x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -6.238000685962823514320988860229631215502 \cdot 10^{-230}:\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\mathbf{elif}\;a \le 3.763484657368967185039825006490638281523 \cdot 10^{-224}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y - \frac{z \cdot y}{t}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r37331629 = x;
double r37331630 = y;
double r37331631 = r37331630 - r37331629;
double r37331632 = z;
double r37331633 = t;
double r37331634 = r37331632 - r37331633;
double r37331635 = r37331631 * r37331634;
double r37331636 = a;
double r37331637 = r37331636 - r37331633;
double r37331638 = r37331635 / r37331637;
double r37331639 = r37331629 + r37331638;
return r37331639;
}
double f(double x, double y, double z, double t, double a) {
double r37331640 = a;
double r37331641 = -6.2380006859628235e-230;
bool r37331642 = r37331640 <= r37331641;
double r37331643 = y;
double r37331644 = x;
double r37331645 = r37331643 - r37331644;
double r37331646 = z;
double r37331647 = t;
double r37331648 = r37331646 - r37331647;
double r37331649 = r37331640 - r37331647;
double r37331650 = r37331648 / r37331649;
double r37331651 = r37331645 * r37331650;
double r37331652 = r37331651 + r37331644;
double r37331653 = 3.763484657368967e-224;
bool r37331654 = r37331640 <= r37331653;
double r37331655 = r37331644 / r37331647;
double r37331656 = r37331646 * r37331643;
double r37331657 = r37331656 / r37331647;
double r37331658 = r37331643 - r37331657;
double r37331659 = fma(r37331655, r37331646, r37331658);
double r37331660 = r37331654 ? r37331659 : r37331652;
double r37331661 = r37331642 ? r37331652 : r37331660;
return r37331661;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.3 |
|---|---|
| Target | 9.2 |
| Herbie | 10.3 |
if a < -6.2380006859628235e-230 or 3.763484657368967e-224 < a Initial program 23.6
Simplified13.2
rmApplied fma-udef13.3
rmApplied div-inv13.4
Applied associate-*l*10.3
Simplified10.3
if -6.2380006859628235e-230 < a < 3.763484657368967e-224Initial program 30.0
Simplified24.7
rmApplied fma-udef24.8
rmApplied div-inv24.9
Applied associate-*l*20.6
Simplified20.5
Taylor expanded around inf 9.7
Simplified10.0
Final simplification10.3
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))