x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -3.71252033879547009 \cdot 10^{-209} \lor \neg \left(a \le 2.699618550558612 \cdot 10^{-210}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r681639 = x;
double r681640 = y;
double r681641 = r681640 - r681639;
double r681642 = z;
double r681643 = t;
double r681644 = r681642 - r681643;
double r681645 = r681641 * r681644;
double r681646 = a;
double r681647 = r681646 - r681643;
double r681648 = r681645 / r681647;
double r681649 = r681639 + r681648;
return r681649;
}
double f(double x, double y, double z, double t, double a) {
double r681650 = a;
double r681651 = -3.71252033879547e-209;
bool r681652 = r681650 <= r681651;
double r681653 = 2.699618550558612e-210;
bool r681654 = r681650 <= r681653;
double r681655 = !r681654;
bool r681656 = r681652 || r681655;
double r681657 = x;
double r681658 = y;
double r681659 = r681658 - r681657;
double r681660 = z;
double r681661 = t;
double r681662 = r681660 - r681661;
double r681663 = r681650 - r681661;
double r681664 = r681662 / r681663;
double r681665 = r681659 * r681664;
double r681666 = r681657 + r681665;
double r681667 = r681657 * r681660;
double r681668 = r681667 / r681661;
double r681669 = r681658 + r681668;
double r681670 = r681660 * r681658;
double r681671 = r681670 / r681661;
double r681672 = r681669 - r681671;
double r681673 = r681656 ? r681666 : r681672;
return r681673;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.8 |
|---|---|
| Target | 9.6 |
| Herbie | 10.7 |
if a < -3.71252033879547e-209 or 2.699618550558612e-210 < a Initial program 23.9
rmApplied *-un-lft-identity23.9
Applied times-frac10.7
Simplified10.7
if -3.71252033879547e-209 < a < 2.699618550558612e-210Initial program 30.7
Taylor expanded around inf 10.2
Final simplification10.7
herbie shell --seed 2020065
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))