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 -3.29505595240201798 \cdot 10^{-290} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r612359 = x;
double r612360 = y;
double r612361 = r612360 - r612359;
double r612362 = z;
double r612363 = t;
double r612364 = r612362 - r612363;
double r612365 = r612361 * r612364;
double r612366 = a;
double r612367 = r612366 - r612363;
double r612368 = r612365 / r612367;
double r612369 = r612359 + r612368;
return r612369;
}
double f(double x, double y, double z, double t, double a) {
double r612370 = x;
double r612371 = y;
double r612372 = r612371 - r612370;
double r612373 = z;
double r612374 = t;
double r612375 = r612373 - r612374;
double r612376 = r612372 * r612375;
double r612377 = a;
double r612378 = r612377 - r612374;
double r612379 = r612376 / r612378;
double r612380 = r612370 + r612379;
double r612381 = -3.295055952402018e-290;
bool r612382 = r612380 <= r612381;
double r612383 = 0.0;
bool r612384 = r612380 <= r612383;
double r612385 = !r612384;
bool r612386 = r612382 || r612385;
double r612387 = r612375 / r612378;
double r612388 = r612372 * r612387;
double r612389 = r612370 + r612388;
double r612390 = r612370 * r612373;
double r612391 = r612390 / r612374;
double r612392 = r612371 + r612391;
double r612393 = r612373 * r612371;
double r612394 = r612393 / r612374;
double r612395 = r612392 - r612394;
double r612396 = r612386 ? r612389 : r612395;
return r612396;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.3 |
|---|---|
| Target | 9.4 |
| Herbie | 8.5 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.295055952402018e-290 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.2
rmApplied *-un-lft-identity21.2
Applied times-frac7.5
Simplified7.5
if -3.295055952402018e-290 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.7
Taylor expanded around inf 19.3
Final simplification8.5
herbie shell --seed 2020056
(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))))