x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -8.256417904055176398799405656254786131067 \cdot 10^{123}:\\
\;\;\;\;\left(\frac{x}{\frac{t}{z}} - \frac{z}{\frac{t}{y}}\right) + y\\
\mathbf{elif}\;t \le 1.54202611814591130820462999265544238001 \cdot 10^{97}:\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{-z}{t}, y, \mathsf{fma}\left(z, \frac{x}{t}, y\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r597243 = x;
double r597244 = y;
double r597245 = r597244 - r597243;
double r597246 = z;
double r597247 = t;
double r597248 = r597246 - r597247;
double r597249 = r597245 * r597248;
double r597250 = a;
double r597251 = r597250 - r597247;
double r597252 = r597249 / r597251;
double r597253 = r597243 + r597252;
return r597253;
}
double f(double x, double y, double z, double t, double a) {
double r597254 = t;
double r597255 = -8.256417904055176e+123;
bool r597256 = r597254 <= r597255;
double r597257 = x;
double r597258 = z;
double r597259 = r597254 / r597258;
double r597260 = r597257 / r597259;
double r597261 = y;
double r597262 = r597254 / r597261;
double r597263 = r597258 / r597262;
double r597264 = r597260 - r597263;
double r597265 = r597264 + r597261;
double r597266 = 1.5420261181459113e+97;
bool r597267 = r597254 <= r597266;
double r597268 = r597261 - r597257;
double r597269 = r597258 - r597254;
double r597270 = a;
double r597271 = r597270 - r597254;
double r597272 = r597269 / r597271;
double r597273 = r597268 * r597272;
double r597274 = r597273 + r597257;
double r597275 = -r597258;
double r597276 = r597275 / r597254;
double r597277 = r597257 / r597254;
double r597278 = fma(r597258, r597277, r597261);
double r597279 = fma(r597276, r597261, r597278);
double r597280 = r597267 ? r597274 : r597279;
double r597281 = r597256 ? r597265 : r597280;
return r597281;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.8 |
|---|---|
| Target | 9.3 |
| Herbie | 10.6 |
if t < -8.256417904055176e+123Initial program 45.9
Simplified22.0
rmApplied fma-udef22.0
rmApplied div-inv22.1
Taylor expanded around inf 25.4
Simplified17.8
if -8.256417904055176e+123 < t < 1.5420261181459113e+97Initial program 13.1
Simplified6.2
rmApplied fma-udef6.2
if 1.5420261181459113e+97 < t Initial program 44.3
Simplified21.4
rmApplied fma-udef21.4
rmApplied div-inv21.5
rmApplied add-cube-cbrt22.2
Simplified22.2
Simplified22.2
Taylor expanded around inf 26.2
Simplified18.3
Final simplification10.6
herbie shell --seed 2019196 +o rules:numerics
(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))))