x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -3.543954312374929 \cdot 10^{-257} \lor \neg \left(a \le 1.0935137489299929 \cdot 10^{-133}\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\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 r671620 = x;
double r671621 = y;
double r671622 = r671621 - r671620;
double r671623 = z;
double r671624 = t;
double r671625 = r671623 - r671624;
double r671626 = r671622 * r671625;
double r671627 = a;
double r671628 = r671627 - r671624;
double r671629 = r671626 / r671628;
double r671630 = r671620 + r671629;
return r671630;
}
double f(double x, double y, double z, double t, double a) {
double r671631 = a;
double r671632 = -3.543954312374929e-257;
bool r671633 = r671631 <= r671632;
double r671634 = 1.093513748929993e-133;
bool r671635 = r671631 <= r671634;
double r671636 = !r671635;
bool r671637 = r671633 || r671636;
double r671638 = y;
double r671639 = x;
double r671640 = r671638 - r671639;
double r671641 = z;
double r671642 = t;
double r671643 = r671641 - r671642;
double r671644 = r671631 - r671642;
double r671645 = r671643 / r671644;
double r671646 = r671640 * r671645;
double r671647 = r671646 + r671639;
double r671648 = r671639 * r671641;
double r671649 = r671648 / r671642;
double r671650 = r671638 + r671649;
double r671651 = r671641 * r671638;
double r671652 = r671651 / r671642;
double r671653 = r671650 - r671652;
double r671654 = r671637 ? r671647 : r671653;
return r671654;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.3 |
| Herbie | 11.0 |
if a < -3.543954312374929e-257 or 1.093513748929993e-133 < a Initial program 23.6
Simplified12.9
rmApplied fma-udef13.0
rmApplied div-inv13.0
Applied associate-*l*10.5
Simplified10.4
if -3.543954312374929e-257 < a < 1.093513748929993e-133Initial program 30.2
Simplified24.5
rmApplied fma-udef24.5
rmApplied div-inv24.6
Applied associate-*l*19.5
Simplified19.5
Taylor expanded around inf 13.8
Final simplification11.0
herbie shell --seed 2020042 +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.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))