x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -1.533543267934166183549967405153551686617 \cdot 10^{-301}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{a - t} - t \cdot \frac{1}{a - t}, y - x, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;\frac{x}{\frac{t}{z}} - \left(\frac{y}{\frac{t}{z}} - y\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{a - t}{z}} - \frac{t}{a - t}, y - x, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r29340671 = x;
double r29340672 = y;
double r29340673 = r29340672 - r29340671;
double r29340674 = z;
double r29340675 = t;
double r29340676 = r29340674 - r29340675;
double r29340677 = r29340673 * r29340676;
double r29340678 = a;
double r29340679 = r29340678 - r29340675;
double r29340680 = r29340677 / r29340679;
double r29340681 = r29340671 + r29340680;
return r29340681;
}
double f(double x, double y, double z, double t, double a) {
double r29340682 = x;
double r29340683 = y;
double r29340684 = r29340683 - r29340682;
double r29340685 = z;
double r29340686 = t;
double r29340687 = r29340685 - r29340686;
double r29340688 = r29340684 * r29340687;
double r29340689 = a;
double r29340690 = r29340689 - r29340686;
double r29340691 = r29340688 / r29340690;
double r29340692 = r29340682 + r29340691;
double r29340693 = -1.5335432679341662e-301;
bool r29340694 = r29340692 <= r29340693;
double r29340695 = r29340685 / r29340690;
double r29340696 = 1.0;
double r29340697 = r29340696 / r29340690;
double r29340698 = r29340686 * r29340697;
double r29340699 = r29340695 - r29340698;
double r29340700 = fma(r29340699, r29340684, r29340682);
double r29340701 = 0.0;
bool r29340702 = r29340692 <= r29340701;
double r29340703 = r29340686 / r29340685;
double r29340704 = r29340682 / r29340703;
double r29340705 = r29340683 / r29340703;
double r29340706 = r29340705 - r29340683;
double r29340707 = r29340704 - r29340706;
double r29340708 = r29340690 / r29340685;
double r29340709 = r29340696 / r29340708;
double r29340710 = r29340686 / r29340690;
double r29340711 = r29340709 - r29340710;
double r29340712 = fma(r29340711, r29340684, r29340682);
double r29340713 = r29340702 ? r29340707 : r29340712;
double r29340714 = r29340694 ? r29340700 : r29340713;
return r29340714;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.8 |
|---|---|
| Target | 9.3 |
| Herbie | 8.3 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.5335432679341662e-301Initial program 21.4
Simplified7.4
rmApplied div-sub7.4
rmApplied div-inv7.5
rmApplied *-commutative7.5
if -1.5335432679341662e-301 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 60.8
Simplified60.8
Taylor expanded around inf 17.6
Simplified17.7
if 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.6
Simplified7.4
rmApplied div-sub7.4
rmApplied clear-num7.4
Final simplification8.3
herbie shell --seed 2019168 +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))))