x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.861395718698591849252320273553934613349 \cdot 10^{239} \lor \neg \left(t \le 1.25588328312964090805240113551723241526 \cdot 10^{172}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}}{\sqrt[3]{a - t}} \cdot \left(\frac{\sqrt[3]{z - t}}{\sqrt[3]{a - t}} \cdot \frac{y - x}{\sqrt[3]{a - t}}\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r468276 = x;
double r468277 = y;
double r468278 = r468277 - r468276;
double r468279 = z;
double r468280 = t;
double r468281 = r468279 - r468280;
double r468282 = r468278 * r468281;
double r468283 = a;
double r468284 = r468283 - r468280;
double r468285 = r468282 / r468284;
double r468286 = r468276 + r468285;
return r468286;
}
double f(double x, double y, double z, double t, double a) {
double r468287 = t;
double r468288 = -1.8613957186985918e+239;
bool r468289 = r468287 <= r468288;
double r468290 = 1.2558832831296409e+172;
bool r468291 = r468287 <= r468290;
double r468292 = !r468291;
bool r468293 = r468289 || r468292;
double r468294 = x;
double r468295 = r468294 / r468287;
double r468296 = z;
double r468297 = y;
double r468298 = fma(r468295, r468296, r468297);
double r468299 = r468296 * r468297;
double r468300 = r468299 / r468287;
double r468301 = r468298 - r468300;
double r468302 = r468296 - r468287;
double r468303 = cbrt(r468302);
double r468304 = r468303 * r468303;
double r468305 = a;
double r468306 = r468305 - r468287;
double r468307 = cbrt(r468306);
double r468308 = r468304 / r468307;
double r468309 = r468303 / r468307;
double r468310 = r468297 - r468294;
double r468311 = r468310 / r468307;
double r468312 = r468309 * r468311;
double r468313 = r468308 * r468312;
double r468314 = r468313 + r468294;
double r468315 = r468293 ? r468301 : r468314;
return r468315;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.4 |
|---|---|
| Target | 9.3 |
| Herbie | 11.1 |
if t < -1.8613957186985918e+239 or 1.2558832831296409e+172 < t Initial program 48.8
Simplified30.4
rmApplied div-inv30.5
rmApplied fma-udef30.6
Simplified30.5
rmApplied add-cube-cbrt31.1
Applied *-un-lft-identity31.1
Applied times-frac31.1
Applied associate-*r*26.4
Simplified26.4
Taylor expanded around inf 24.9
Simplified20.3
if -1.8613957186985918e+239 < t < 1.2558832831296409e+172Initial program 18.4
Simplified10.8
rmApplied div-inv10.9
rmApplied fma-udef10.9
Simplified10.9
rmApplied add-cube-cbrt11.5
Applied *-un-lft-identity11.5
Applied times-frac11.4
Applied associate-*r*9.2
Simplified9.2
rmApplied add-cube-cbrt9.1
Applied times-frac9.2
Applied associate-*l*8.9
Final simplification11.1
herbie shell --seed 2019304 +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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))