x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - t\right)}{a - t} = -\infty:\\
\;\;\;\;\left(y \cdot \left(\frac{1}{a - t} \cdot z\right) + \left(-t\right) \cdot \frac{y}{a - t}\right) + x\\
\mathbf{elif}\;x + \frac{y \cdot \left(z - t\right)}{a - t} \le 4.9667000117107553 \cdot 10^{294}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{y}{a - t} \cdot z + \left(-t\right) \cdot \frac{1}{\frac{a - t}{y}}\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r842631 = x;
double r842632 = y;
double r842633 = z;
double r842634 = t;
double r842635 = r842633 - r842634;
double r842636 = r842632 * r842635;
double r842637 = a;
double r842638 = r842637 - r842634;
double r842639 = r842636 / r842638;
double r842640 = r842631 + r842639;
return r842640;
}
double f(double x, double y, double z, double t, double a) {
double r842641 = x;
double r842642 = y;
double r842643 = z;
double r842644 = t;
double r842645 = r842643 - r842644;
double r842646 = r842642 * r842645;
double r842647 = a;
double r842648 = r842647 - r842644;
double r842649 = r842646 / r842648;
double r842650 = r842641 + r842649;
double r842651 = -inf.0;
bool r842652 = r842650 <= r842651;
double r842653 = 1.0;
double r842654 = r842653 / r842648;
double r842655 = r842654 * r842643;
double r842656 = r842642 * r842655;
double r842657 = -r842644;
double r842658 = r842642 / r842648;
double r842659 = r842657 * r842658;
double r842660 = r842656 + r842659;
double r842661 = r842660 + r842641;
double r842662 = 4.9667000117107553e+294;
bool r842663 = r842650 <= r842662;
double r842664 = r842658 * r842643;
double r842665 = r842648 / r842642;
double r842666 = r842653 / r842665;
double r842667 = r842657 * r842666;
double r842668 = r842664 + r842667;
double r842669 = r842668 + r842641;
double r842670 = r842663 ? r842650 : r842669;
double r842671 = r842652 ? r842661 : r842670;
return r842671;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 1.3 |
| Herbie | 0.3 |
if (+ x (/ (* y (- z t)) (- a t))) < -inf.0Initial program 64.0
Simplified0.2
rmApplied div-inv0.3
rmApplied add-cube-cbrt1.1
Applied *-un-lft-identity1.1
Applied times-frac1.1
Applied associate-*r*1.1
Simplified1.1
rmApplied fma-udef1.1
Simplified0.2
rmApplied div-inv0.2
Applied associate-*l*0.2
if -inf.0 < (+ x (/ (* y (- z t)) (- a t))) < 4.9667000117107553e+294Initial program 0.3
if 4.9667000117107553e+294 < (+ x (/ (* y (- z t)) (- a t))) Initial program 55.4
Simplified0.8
rmApplied div-inv0.9
rmApplied add-cube-cbrt1.6
Applied *-un-lft-identity1.6
Applied times-frac1.6
Applied associate-*r*1.6
Simplified1.6
rmApplied fma-udef1.6
Simplified0.8
rmApplied clear-num0.9
Final simplification0.3
herbie shell --seed 2020034 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))