x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.065570213468218434425365539194697957465 \cdot 10^{-134} \lor \neg \left(a \le 2.084757909820724198119172407300139325836 \cdot 10^{-79}\right):\\
\;\;\;\;\frac{z - t}{a - t} \cdot y + \mathsf{fma}\left(\frac{1}{\frac{a - t}{z - t}}, -x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{z - t}{a - t} \cdot y + \frac{x \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r455742 = x;
double r455743 = y;
double r455744 = r455743 - r455742;
double r455745 = z;
double r455746 = t;
double r455747 = r455745 - r455746;
double r455748 = r455744 * r455747;
double r455749 = a;
double r455750 = r455749 - r455746;
double r455751 = r455748 / r455750;
double r455752 = r455742 + r455751;
return r455752;
}
double f(double x, double y, double z, double t, double a) {
double r455753 = a;
double r455754 = -1.0655702134682184e-134;
bool r455755 = r455753 <= r455754;
double r455756 = 2.0847579098207242e-79;
bool r455757 = r455753 <= r455756;
double r455758 = !r455757;
bool r455759 = r455755 || r455758;
double r455760 = z;
double r455761 = t;
double r455762 = r455760 - r455761;
double r455763 = r455753 - r455761;
double r455764 = r455762 / r455763;
double r455765 = y;
double r455766 = r455764 * r455765;
double r455767 = 1.0;
double r455768 = r455763 / r455762;
double r455769 = r455767 / r455768;
double r455770 = x;
double r455771 = -r455770;
double r455772 = fma(r455769, r455771, r455770);
double r455773 = r455766 + r455772;
double r455774 = r455770 * r455760;
double r455775 = r455774 / r455761;
double r455776 = r455766 + r455775;
double r455777 = r455759 ? r455773 : r455776;
return r455777;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 25.4 |
|---|---|
| Target | 9.8 |
| Herbie | 7.9 |
if a < -1.0655702134682184e-134 or 2.0847579098207242e-79 < a Initial program 23.3
Simplified11.0
rmApplied fma-udef11.1
Simplified9.2
rmApplied sub-neg9.2
Applied distribute-lft-in9.2
Applied associate-+l+6.6
Simplified6.6
rmApplied clear-num6.6
if -1.0655702134682184e-134 < a < 2.0847579098207242e-79Initial program 30.4
Simplified26.5
rmApplied fma-udef26.5
Simplified20.7
rmApplied sub-neg20.7
Applied distribute-lft-in20.7
Applied associate-+l+12.2
Simplified12.2
Taylor expanded around inf 10.9
Final simplification7.9
herbie shell --seed 2019235 +o rules:numerics
(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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))