\frac{x}{y} \cdot \left(z - t\right) + t\begin{array}{l}
\mathbf{if}\;x \le 1185186617532904803707928969216:\\
\;\;\;\;\left(\frac{z}{\frac{y}{x}} - \frac{t}{\frac{y}{x}}\right) + t\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y}{z - t}} + t\\
\end{array}double f(double x, double y, double z, double t) {
double r351669 = x;
double r351670 = y;
double r351671 = r351669 / r351670;
double r351672 = z;
double r351673 = t;
double r351674 = r351672 - r351673;
double r351675 = r351671 * r351674;
double r351676 = r351675 + r351673;
return r351676;
}
double f(double x, double y, double z, double t) {
double r351677 = x;
double r351678 = 1.1851866175329048e+30;
bool r351679 = r351677 <= r351678;
double r351680 = z;
double r351681 = y;
double r351682 = r351681 / r351677;
double r351683 = r351680 / r351682;
double r351684 = t;
double r351685 = r351684 / r351682;
double r351686 = r351683 - r351685;
double r351687 = r351686 + r351684;
double r351688 = r351680 - r351684;
double r351689 = r351681 / r351688;
double r351690 = r351677 / r351689;
double r351691 = r351690 + r351684;
double r351692 = r351679 ? r351687 : r351691;
return r351692;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.2 |
|---|---|
| Target | 2.5 |
| Herbie | 1.7 |
if x < 1.1851866175329048e+30Initial program 1.7
rmApplied add-cube-cbrt2.2
Applied associate-*r*2.2
Taylor expanded around 0 4.3
Simplified1.7
if 1.1851866175329048e+30 < x Initial program 4.6
rmApplied *-un-lft-identity4.6
Applied associate-*l*4.6
Simplified1.8
Final simplification1.7
herbie shell --seed 2019195
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:herbie-target
(if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))
(+ (* (/ x y) (- z t)) t))