x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le -1.18854890984331821 \cdot 10^{-292} \lor \neg \left(x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le 0.0\right):\\
\;\;\;\;t \cdot \left(\frac{y}{a - z} - \frac{z}{a - z}\right) + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\
\mathbf{else}:\\
\;\;\;\;t \cdot \frac{1}{\frac{a - z}{y - z}} + \frac{x \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r563302 = x;
double r563303 = y;
double r563304 = z;
double r563305 = r563303 - r563304;
double r563306 = t;
double r563307 = r563306 - r563302;
double r563308 = r563305 * r563307;
double r563309 = a;
double r563310 = r563309 - r563304;
double r563311 = r563308 / r563310;
double r563312 = r563302 + r563311;
return r563312;
}
double f(double x, double y, double z, double t, double a) {
double r563313 = x;
double r563314 = y;
double r563315 = z;
double r563316 = r563314 - r563315;
double r563317 = t;
double r563318 = r563317 - r563313;
double r563319 = r563316 * r563318;
double r563320 = a;
double r563321 = r563320 - r563315;
double r563322 = r563319 / r563321;
double r563323 = r563313 + r563322;
double r563324 = -1.1885489098433182e-292;
bool r563325 = r563323 <= r563324;
double r563326 = 0.0;
bool r563327 = r563323 <= r563326;
double r563328 = !r563327;
bool r563329 = r563325 || r563328;
double r563330 = r563314 / r563321;
double r563331 = r563315 / r563321;
double r563332 = r563330 - r563331;
double r563333 = r563317 * r563332;
double r563334 = -r563313;
double r563335 = r563316 / r563321;
double r563336 = fma(r563334, r563335, r563313);
double r563337 = r563333 + r563336;
double r563338 = 1.0;
double r563339 = r563321 / r563316;
double r563340 = r563338 / r563339;
double r563341 = r563317 * r563340;
double r563342 = r563313 * r563314;
double r563343 = r563342 / r563315;
double r563344 = r563341 + r563343;
double r563345 = r563329 ? r563337 : r563344;
return r563345;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.6 |
|---|---|
| Target | 11.8 |
| Herbie | 6.1 |
if (+ x (/ (* (- y z) (- t x)) (- a z))) < -1.1885489098433182e-292 or 0.0 < (+ x (/ (* (- y z) (- t x)) (- a z))) Initial program 21.4
Simplified7.3
rmApplied fma-udef7.3
rmApplied sub-neg7.3
Applied distribute-rgt-in7.3
Applied associate-+l+4.9
Simplified4.9
rmApplied div-sub4.9
if -1.1885489098433182e-292 < (+ x (/ (* (- y z) (- t x)) (- a z))) < 0.0Initial program 60.4
Simplified60.3
rmApplied fma-udef60.3
rmApplied sub-neg60.3
Applied distribute-rgt-in60.3
Applied associate-+l+34.6
Simplified34.6
rmApplied clear-num34.6
Taylor expanded around inf 18.5
Final simplification6.1
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))