x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -7.856678782897123650828279040976448678111 \cdot 10^{-126}:\\
\;\;\;\;\frac{y - x}{\frac{1}{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}} \cdot \frac{a - t}{\sqrt[3]{z - t}}} + x\\
\mathbf{elif}\;a \le 8.765571518245334517432482424498572415092 \cdot 10^{-120}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - x}{\left(\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}\right) \cdot \frac{\sqrt[3]{a - t}}{z - t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r508985 = x;
double r508986 = y;
double r508987 = r508986 - r508985;
double r508988 = z;
double r508989 = t;
double r508990 = r508988 - r508989;
double r508991 = r508987 * r508990;
double r508992 = a;
double r508993 = r508992 - r508989;
double r508994 = r508991 / r508993;
double r508995 = r508985 + r508994;
return r508995;
}
double f(double x, double y, double z, double t, double a) {
double r508996 = a;
double r508997 = -7.856678782897124e-126;
bool r508998 = r508996 <= r508997;
double r508999 = y;
double r509000 = x;
double r509001 = r508999 - r509000;
double r509002 = 1.0;
double r509003 = z;
double r509004 = t;
double r509005 = r509003 - r509004;
double r509006 = cbrt(r509005);
double r509007 = r509006 * r509006;
double r509008 = r509002 / r509007;
double r509009 = r508996 - r509004;
double r509010 = r509009 / r509006;
double r509011 = r509008 * r509010;
double r509012 = r509001 / r509011;
double r509013 = r509012 + r509000;
double r509014 = 8.765571518245335e-120;
bool r509015 = r508996 <= r509014;
double r509016 = r509000 * r509003;
double r509017 = r509016 / r509004;
double r509018 = r508999 + r509017;
double r509019 = r509003 * r508999;
double r509020 = r509019 / r509004;
double r509021 = r509018 - r509020;
double r509022 = cbrt(r509009);
double r509023 = r509022 * r509022;
double r509024 = r509022 / r509005;
double r509025 = r509023 * r509024;
double r509026 = r509001 / r509025;
double r509027 = r509000 + r509026;
double r509028 = r509015 ? r509021 : r509027;
double r509029 = r508998 ? r509013 : r509028;
return r509029;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 23.9 |
|---|---|
| Target | 8.9 |
| Herbie | 10.5 |
if a < -7.856678782897124e-126Initial program 22.6
rmApplied associate-/l*8.6
rmApplied *-un-lft-identity8.6
Applied *-un-lft-identity8.6
Applied times-frac8.6
Simplified8.6
rmApplied add-cube-cbrt9.2
Applied *-un-lft-identity9.2
Applied times-frac9.2
if -7.856678782897124e-126 < a < 8.765571518245335e-120Initial program 28.5
Taylor expanded around inf 15.3
if 8.765571518245335e-120 < a Initial program 22.0
rmApplied associate-/l*8.0
rmApplied *-un-lft-identity8.0
Applied add-cube-cbrt8.5
Applied times-frac8.5
Simplified8.5
Final simplification10.5
herbie shell --seed 2019305
(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))))