\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\begin{array}{l}
\mathbf{if}\;\left(x \cdot 9\right) \cdot y \le -1.294924473296951096494539046235709554954 \cdot 10^{188}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z} \cdot \frac{y}{c}, 9, \frac{b}{z \cdot c}\right) - \frac{a \cdot 4}{\frac{c}{t}}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le -1.904700908386511418443082122868403069122 \cdot 10^{-37}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x \cdot y}{z \cdot c}, 9, \frac{1}{z} \cdot \frac{b}{c}\right) - \left(a \cdot 4\right) \cdot \frac{t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le -7.447790534870727628048627177914249278465 \cdot 10^{-270}:\\
\;\;\;\;\frac{1}{\frac{c}{\frac{\mathsf{fma}\left(y, x \cdot 9, b\right)}{z} - \left(a \cdot 4\right) \cdot t}}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le 3.819296029990499914802770790991775665762 \cdot 10^{-306}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x \cdot y}{z \cdot c}, 9, \frac{1}{z} \cdot \frac{b}{c}\right) - \left(a \cdot 4\right) \cdot \frac{t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le 1.939735069916728119712846813823528203938 \cdot 10^{-72}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x \cdot y}{z \cdot c}, 9, b \cdot \frac{1}{z \cdot c}\right) - \frac{\left(a \cdot 4\right) \cdot t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le 376524910285406979937406490057197838401500:\\
\;\;\;\;\mathsf{fma}\left(\frac{x \cdot y}{z \cdot c}, 9, \frac{1}{z} \cdot \frac{b}{c}\right) - \left(a \cdot 4\right) \cdot \frac{t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le 1.678396921035363929884299283685697328486 \cdot 10^{293}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x \cdot y}{z \cdot c}, 9, b \cdot \frac{1}{z \cdot c}\right) - \frac{\left(a \cdot 4\right) \cdot t}{c}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z} \cdot \frac{y}{c}, 9, \frac{b}{z \cdot c}\right) - \frac{a \cdot 4}{\frac{c}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r551184 = x;
double r551185 = 9.0;
double r551186 = r551184 * r551185;
double r551187 = y;
double r551188 = r551186 * r551187;
double r551189 = z;
double r551190 = 4.0;
double r551191 = r551189 * r551190;
double r551192 = t;
double r551193 = r551191 * r551192;
double r551194 = a;
double r551195 = r551193 * r551194;
double r551196 = r551188 - r551195;
double r551197 = b;
double r551198 = r551196 + r551197;
double r551199 = c;
double r551200 = r551189 * r551199;
double r551201 = r551198 / r551200;
return r551201;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r551202 = x;
double r551203 = 9.0;
double r551204 = r551202 * r551203;
double r551205 = y;
double r551206 = r551204 * r551205;
double r551207 = -1.2949244732969511e+188;
bool r551208 = r551206 <= r551207;
double r551209 = z;
double r551210 = r551202 / r551209;
double r551211 = c;
double r551212 = r551205 / r551211;
double r551213 = r551210 * r551212;
double r551214 = b;
double r551215 = r551209 * r551211;
double r551216 = r551214 / r551215;
double r551217 = fma(r551213, r551203, r551216);
double r551218 = a;
double r551219 = 4.0;
double r551220 = r551218 * r551219;
double r551221 = t;
double r551222 = r551211 / r551221;
double r551223 = r551220 / r551222;
double r551224 = r551217 - r551223;
double r551225 = -1.9047009083865114e-37;
bool r551226 = r551206 <= r551225;
double r551227 = r551202 * r551205;
double r551228 = r551227 / r551215;
double r551229 = 1.0;
double r551230 = r551229 / r551209;
double r551231 = r551214 / r551211;
double r551232 = r551230 * r551231;
double r551233 = fma(r551228, r551203, r551232);
double r551234 = r551221 / r551211;
double r551235 = r551220 * r551234;
double r551236 = r551233 - r551235;
double r551237 = -7.447790534870728e-270;
bool r551238 = r551206 <= r551237;
double r551239 = fma(r551205, r551204, r551214);
double r551240 = r551239 / r551209;
double r551241 = r551220 * r551221;
double r551242 = r551240 - r551241;
double r551243 = r551211 / r551242;
double r551244 = r551229 / r551243;
double r551245 = 3.8192960299905e-306;
bool r551246 = r551206 <= r551245;
double r551247 = 1.939735069916728e-72;
bool r551248 = r551206 <= r551247;
double r551249 = r551229 / r551215;
double r551250 = r551214 * r551249;
double r551251 = fma(r551228, r551203, r551250);
double r551252 = r551241 / r551211;
double r551253 = r551251 - r551252;
double r551254 = 3.76524910285407e+41;
bool r551255 = r551206 <= r551254;
double r551256 = 1.678396921035364e+293;
bool r551257 = r551206 <= r551256;
double r551258 = r551257 ? r551253 : r551224;
double r551259 = r551255 ? r551236 : r551258;
double r551260 = r551248 ? r551253 : r551259;
double r551261 = r551246 ? r551236 : r551260;
double r551262 = r551238 ? r551244 : r551261;
double r551263 = r551226 ? r551236 : r551262;
double r551264 = r551208 ? r551224 : r551263;
return r551264;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 20.6 |
|---|---|
| Target | 14.3 |
| Herbie | 8.1 |
if (* (* x 9.0) y) < -1.2949244732969511e+188 or 1.678396921035364e+293 < (* (* x 9.0) y) Initial program 45.8
Simplified43.5
Taylor expanded around 0 40.4
Simplified40.4
rmApplied associate-/l*38.7
rmApplied times-frac10.2
if -1.2949244732969511e+188 < (* (* x 9.0) y) < -1.9047009083865114e-37 or -7.447790534870728e-270 < (* (* x 9.0) y) < 3.8192960299905e-306 or 1.939735069916728e-72 < (* (* x 9.0) y) < 3.76524910285407e+41Initial program 17.4
Simplified9.0
Taylor expanded around 0 7.3
Simplified7.3
rmApplied *-un-lft-identity7.3
Applied times-frac6.8
Simplified6.8
rmApplied *-un-lft-identity6.8
Applied times-frac7.9
if -1.9047009083865114e-37 < (* (* x 9.0) y) < -7.447790534870728e-270Initial program 16.0
Simplified6.8
rmApplied clear-num7.0
if 3.8192960299905e-306 < (* (* x 9.0) y) < 1.939735069916728e-72 or 3.76524910285407e+41 < (* (* x 9.0) y) < 1.678396921035364e+293Initial program 17.6
Simplified10.0
Taylor expanded around 0 7.9
Simplified7.9
rmApplied div-inv8.2
Final simplification8.1
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:precision binary64
:herbie-target
(if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -1.1001567408041049e-171) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.17088779117474882e-53) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 2.8768236795461372e130) (- (+ (* (* 9 (/ y c)) (/ x z)) (/ b (* c z))) (* 4 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.3838515042456319e158) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (- (+ (* 9 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)))