x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.9761177729831929 \cdot 10^{-99} \lor \neg \left(a \le 3.1844700299462174 \cdot 10^{-74}\right):\\
\;\;\;\;\left(\left(z - t\right) \cdot \frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}\right) \cdot \frac{\sqrt[3]{y - x}}{\sqrt[3]{a - t}} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y - \frac{z \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r734396 = x;
double r734397 = y;
double r734398 = r734397 - r734396;
double r734399 = z;
double r734400 = t;
double r734401 = r734399 - r734400;
double r734402 = r734398 * r734401;
double r734403 = a;
double r734404 = r734403 - r734400;
double r734405 = r734402 / r734404;
double r734406 = r734396 + r734405;
return r734406;
}
double f(double x, double y, double z, double t, double a) {
double r734407 = a;
double r734408 = -1.976117772983193e-99;
bool r734409 = r734407 <= r734408;
double r734410 = 3.1844700299462174e-74;
bool r734411 = r734407 <= r734410;
double r734412 = !r734411;
bool r734413 = r734409 || r734412;
double r734414 = z;
double r734415 = t;
double r734416 = r734414 - r734415;
double r734417 = y;
double r734418 = x;
double r734419 = r734417 - r734418;
double r734420 = cbrt(r734419);
double r734421 = r734420 * r734420;
double r734422 = r734407 - r734415;
double r734423 = cbrt(r734422);
double r734424 = r734423 * r734423;
double r734425 = r734421 / r734424;
double r734426 = r734416 * r734425;
double r734427 = r734420 / r734423;
double r734428 = r734426 * r734427;
double r734429 = r734428 + r734418;
double r734430 = r734418 / r734415;
double r734431 = r734414 * r734417;
double r734432 = r734431 / r734415;
double r734433 = r734417 - r734432;
double r734434 = fma(r734430, r734414, r734433);
double r734435 = r734413 ? r734429 : r734434;
return r734435;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.9 |
|---|---|
| Target | 9.8 |
| Herbie | 11.4 |
if a < -1.976117772983193e-99 or 3.1844700299462174e-74 < a Initial program 22.5
Simplified10.5
rmApplied div-inv10.6
rmApplied fma-udef10.7
Simplified10.6
rmApplied add-cube-cbrt11.1
Applied add-cube-cbrt11.2
Applied times-frac11.2
Applied associate-*r*8.9
if -1.976117772983193e-99 < a < 3.1844700299462174e-74Initial program 29.8
Simplified25.3
rmApplied div-inv25.4
rmApplied fma-udef25.5
Simplified25.4
Taylor expanded around inf 17.2
Simplified16.6
Final simplification11.4
herbie shell --seed 2020057 +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))))