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 -1.828093467919815950939216553514049710649 \cdot 10^{-286}:\\
\;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 7.220777503459318304277048324694986155104 \cdot 10^{-276}:\\
\;\;\;\;\left(y + \frac{z \cdot x}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r32244176 = x;
double r32244177 = y;
double r32244178 = r32244177 - r32244176;
double r32244179 = z;
double r32244180 = t;
double r32244181 = r32244179 - r32244180;
double r32244182 = r32244178 * r32244181;
double r32244183 = a;
double r32244184 = r32244183 - r32244180;
double r32244185 = r32244182 / r32244184;
double r32244186 = r32244176 + r32244185;
return r32244186;
}
double f(double x, double y, double z, double t, double a) {
double r32244187 = x;
double r32244188 = y;
double r32244189 = r32244188 - r32244187;
double r32244190 = z;
double r32244191 = t;
double r32244192 = r32244190 - r32244191;
double r32244193 = r32244189 * r32244192;
double r32244194 = a;
double r32244195 = r32244194 - r32244191;
double r32244196 = r32244193 / r32244195;
double r32244197 = r32244187 + r32244196;
double r32244198 = -1.828093467919816e-286;
bool r32244199 = r32244197 <= r32244198;
double r32244200 = 1.0;
double r32244201 = r32244194 / r32244192;
double r32244202 = r32244191 / r32244192;
double r32244203 = r32244201 - r32244202;
double r32244204 = r32244200 / r32244203;
double r32244205 = r32244204 * r32244189;
double r32244206 = r32244205 + r32244187;
double r32244207 = 7.220777503459318e-276;
bool r32244208 = r32244197 <= r32244207;
double r32244209 = r32244190 * r32244187;
double r32244210 = r32244209 / r32244191;
double r32244211 = r32244188 + r32244210;
double r32244212 = r32244190 * r32244188;
double r32244213 = r32244212 / r32244191;
double r32244214 = r32244211 - r32244213;
double r32244215 = r32244208 ? r32244214 : r32244206;
double r32244216 = r32244199 ? r32244206 : r32244215;
return r32244216;
}




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.2 |
| Herbie | 8.4 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.828093467919816e-286 or 7.220777503459318e-276 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.2
rmApplied associate-/l*7.1
rmApplied div-sub7.1
rmApplied div-inv7.2
if -1.828093467919816e-286 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 7.220777503459318e-276Initial program 58.0
Taylor expanded around inf 20.8
Final simplification8.4
herbie shell --seed 2019174
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))