x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -6.35262688856634336 \cdot 10^{-298}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{1}, \frac{\sqrt[3]{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}} \cdot \left(\frac{\sqrt[3]{\sqrt[3]{y - x}}}{\sqrt[3]{a - t}} \cdot \left(z - t\right)\right), x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 1.96010087509 \cdot 10^{-248}:\\
\;\;\;\;y\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{1}, \frac{\sqrt[3]{y - x}}{a - t} \cdot \left(z - t\right), x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r2342 = x;
double r2343 = y;
double r2344 = r2343 - r2342;
double r2345 = z;
double r2346 = t;
double r2347 = r2345 - r2346;
double r2348 = r2344 * r2347;
double r2349 = a;
double r2350 = r2349 - r2346;
double r2351 = r2348 / r2350;
double r2352 = r2342 + r2351;
return r2352;
}
double f(double x, double y, double z, double t, double a) {
double r2353 = x;
double r2354 = y;
double r2355 = r2354 - r2353;
double r2356 = z;
double r2357 = t;
double r2358 = r2356 - r2357;
double r2359 = r2355 * r2358;
double r2360 = a;
double r2361 = r2360 - r2357;
double r2362 = r2359 / r2361;
double r2363 = r2353 + r2362;
double r2364 = -6.352626888566343e-298;
bool r2365 = r2363 <= r2364;
double r2366 = cbrt(r2355);
double r2367 = r2366 * r2366;
double r2368 = 1.0;
double r2369 = r2367 / r2368;
double r2370 = cbrt(r2367);
double r2371 = cbrt(r2361);
double r2372 = r2371 * r2371;
double r2373 = r2370 / r2372;
double r2374 = cbrt(r2366);
double r2375 = r2374 / r2371;
double r2376 = r2375 * r2358;
double r2377 = r2373 * r2376;
double r2378 = fma(r2369, r2377, r2353);
double r2379 = 1.960100875085522e-248;
bool r2380 = r2363 <= r2379;
double r2381 = r2366 / r2361;
double r2382 = r2381 * r2358;
double r2383 = fma(r2369, r2382, r2353);
double r2384 = r2380 ? r2354 : r2383;
double r2385 = r2365 ? r2378 : r2384;
return r2385;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 25.0 |
|---|---|
| Target | 9.3 |
| Herbie | 10.9 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -6.352626888566343e-298Initial program 21.9
Simplified10.9
rmApplied fma-udef11.0
rmApplied *-un-lft-identity11.0
Applied add-cube-cbrt11.6
Applied times-frac11.6
Applied associate-*l*8.6
rmApplied add-cube-cbrt8.8
Applied add-cube-cbrt8.8
Applied cbrt-prod8.9
Applied times-frac8.9
Applied associate-*l*8.2
rmApplied fma-def8.2
if -6.352626888566343e-298 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 1.960100875085522e-248Initial program 55.8
Simplified56.6
Taylor expanded around 0 36.2
if 1.960100875085522e-248 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.9
Simplified10.8
rmApplied fma-udef10.8
rmApplied *-un-lft-identity10.8
Applied add-cube-cbrt11.4
Applied times-frac11.4
Applied associate-*l*8.5
rmApplied fma-def8.5
Final simplification10.9
herbie shell --seed 2020025 +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))))