\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -7.6038168240882645 \cdot 10^{144}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.2731438419880699 \cdot 10^{-203}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.1125387673008883 \cdot 10^{122}:\\
\;\;\;\;\frac{\frac{\frac{1}{\frac{2}{4}}}{\frac{1}{c}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r132109 = b;
double r132110 = -r132109;
double r132111 = r132109 * r132109;
double r132112 = 4.0;
double r132113 = a;
double r132114 = r132112 * r132113;
double r132115 = c;
double r132116 = r132114 * r132115;
double r132117 = r132111 - r132116;
double r132118 = sqrt(r132117);
double r132119 = r132110 + r132118;
double r132120 = 2.0;
double r132121 = r132120 * r132113;
double r132122 = r132119 / r132121;
return r132122;
}
double f(double a, double b, double c) {
double r132123 = b;
double r132124 = -7.603816824088264e+144;
bool r132125 = r132123 <= r132124;
double r132126 = 1.0;
double r132127 = c;
double r132128 = r132127 / r132123;
double r132129 = a;
double r132130 = r132123 / r132129;
double r132131 = r132128 - r132130;
double r132132 = r132126 * r132131;
double r132133 = -3.27314384198807e-203;
bool r132134 = r132123 <= r132133;
double r132135 = -r132123;
double r132136 = r132123 * r132123;
double r132137 = 4.0;
double r132138 = r132137 * r132129;
double r132139 = r132138 * r132127;
double r132140 = r132136 - r132139;
double r132141 = sqrt(r132140);
double r132142 = sqrt(r132141);
double r132143 = r132142 * r132142;
double r132144 = r132135 + r132143;
double r132145 = 2.0;
double r132146 = r132145 * r132129;
double r132147 = r132144 / r132146;
double r132148 = 2.1125387673008883e+122;
bool r132149 = r132123 <= r132148;
double r132150 = 1.0;
double r132151 = r132145 / r132137;
double r132152 = r132150 / r132151;
double r132153 = r132150 / r132127;
double r132154 = r132152 / r132153;
double r132155 = r132135 - r132141;
double r132156 = r132154 / r132155;
double r132157 = -1.0;
double r132158 = r132157 * r132128;
double r132159 = r132149 ? r132156 : r132158;
double r132160 = r132134 ? r132147 : r132159;
double r132161 = r132125 ? r132132 : r132160;
return r132161;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.2 |
| Herbie | 6.5 |
if b < -7.603816824088264e+144Initial program 61.2
Taylor expanded around -inf 2.8
Simplified2.8
if -7.603816824088264e+144 < b < -3.27314384198807e-203Initial program 7.1
rmApplied add-sqr-sqrt7.1
Applied sqrt-prod7.4
if -3.27314384198807e-203 < b < 2.1125387673008883e+122Initial program 29.8
rmApplied flip-+29.9
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Applied associate-/l*16.3
Simplified15.5
rmApplied associate-/r*15.3
Simplified9.5
if 2.1125387673008883e+122 < b Initial program 61.1
Taylor expanded around inf 2.1
Final simplification6.5
herbie shell --seed 2020036
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))