| Alternative 1 | |
|---|---|
| Accuracy | 84.1% |
| Cost | 7624 |
(FPCore (a b c) :precision binary64 (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(FPCore (a b c)
:precision binary64
(if (<= b -3.1e+83)
(/ (- b) a)
(if (<= b -6e-308)
(/ (- (sqrt (- (* b b) (* 4.0 (* a c)))) b) (* a 2.0))
(if (<= b 6.8e-24)
(/ c (/ (+ b (hypot (sqrt (* c (* a -4.0))) b)) -2.0))
(/ (- c) b)))))double code(double a, double b, double c) {
return (-b + sqrt(((b * b) - (4.0 * (a * c))))) / (2.0 * a);
}
double code(double a, double b, double c) {
double tmp;
if (b <= -3.1e+83) {
tmp = -b / a;
} else if (b <= -6e-308) {
tmp = (sqrt(((b * b) - (4.0 * (a * c)))) - b) / (a * 2.0);
} else if (b <= 6.8e-24) {
tmp = c / ((b + hypot(sqrt((c * (a * -4.0))), b)) / -2.0);
} else {
tmp = -c / b;
}
return tmp;
}
public static double code(double a, double b, double c) {
return (-b + Math.sqrt(((b * b) - (4.0 * (a * c))))) / (2.0 * a);
}
public static double code(double a, double b, double c) {
double tmp;
if (b <= -3.1e+83) {
tmp = -b / a;
} else if (b <= -6e-308) {
tmp = (Math.sqrt(((b * b) - (4.0 * (a * c)))) - b) / (a * 2.0);
} else if (b <= 6.8e-24) {
tmp = c / ((b + Math.hypot(Math.sqrt((c * (a * -4.0))), b)) / -2.0);
} else {
tmp = -c / b;
}
return tmp;
}
def code(a, b, c): return (-b + math.sqrt(((b * b) - (4.0 * (a * c))))) / (2.0 * a)
def code(a, b, c): tmp = 0 if b <= -3.1e+83: tmp = -b / a elif b <= -6e-308: tmp = (math.sqrt(((b * b) - (4.0 * (a * c)))) - b) / (a * 2.0) elif b <= 6.8e-24: tmp = c / ((b + math.hypot(math.sqrt((c * (a * -4.0))), b)) / -2.0) else: tmp = -c / b return tmp
function code(a, b, c) return Float64(Float64(Float64(-b) + sqrt(Float64(Float64(b * b) - Float64(4.0 * Float64(a * c))))) / Float64(2.0 * a)) end
function code(a, b, c) tmp = 0.0 if (b <= -3.1e+83) tmp = Float64(Float64(-b) / a); elseif (b <= -6e-308) tmp = Float64(Float64(sqrt(Float64(Float64(b * b) - Float64(4.0 * Float64(a * c)))) - b) / Float64(a * 2.0)); elseif (b <= 6.8e-24) tmp = Float64(c / Float64(Float64(b + hypot(sqrt(Float64(c * Float64(a * -4.0))), b)) / -2.0)); else tmp = Float64(Float64(-c) / b); end return tmp end
function tmp = code(a, b, c) tmp = (-b + sqrt(((b * b) - (4.0 * (a * c))))) / (2.0 * a); end
function tmp_2 = code(a, b, c) tmp = 0.0; if (b <= -3.1e+83) tmp = -b / a; elseif (b <= -6e-308) tmp = (sqrt(((b * b) - (4.0 * (a * c)))) - b) / (a * 2.0); elseif (b <= 6.8e-24) tmp = c / ((b + hypot(sqrt((c * (a * -4.0))), b)) / -2.0); else tmp = -c / b; end tmp_2 = tmp; end
code[a_, b_, c_] := N[(N[((-b) + N[Sqrt[N[(N[(b * b), $MachinePrecision] - N[(4.0 * N[(a * c), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(2.0 * a), $MachinePrecision]), $MachinePrecision]
code[a_, b_, c_] := If[LessEqual[b, -3.1e+83], N[((-b) / a), $MachinePrecision], If[LessEqual[b, -6e-308], N[(N[(N[Sqrt[N[(N[(b * b), $MachinePrecision] - N[(4.0 * N[(a * c), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - b), $MachinePrecision] / N[(a * 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 6.8e-24], N[(c / N[(N[(b + N[Sqrt[N[Sqrt[N[(c * N[(a * -4.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] ^ 2 + b ^ 2], $MachinePrecision]), $MachinePrecision] / -2.0), $MachinePrecision]), $MachinePrecision], N[((-c) / b), $MachinePrecision]]]]
\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \leq -3.1 \cdot 10^{+83}:\\
\;\;\;\;\frac{-b}{a}\\
\mathbf{elif}\;b \leq -6 \cdot 10^{-308}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{a \cdot 2}\\
\mathbf{elif}\;b \leq 6.8 \cdot 10^{-24}:\\
\;\;\;\;\frac{c}{\frac{b + \mathsf{hypot}\left(\sqrt{c \cdot \left(a \cdot -4\right)}, b\right)}{-2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}
Results
| Original | 47.1% |
|---|---|
| Target | 67.9% |
| Herbie | 86.9% |
if b < -3.09999999999999992e83Initial program 33.4%
Simplified33.3%
[Start]33.4 | \[ \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
|---|---|
neg-sub0 [=>]33.4 | \[ \frac{\color{blue}{\left(0 - b\right)} + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
associate-+l- [=>]33.4 | \[ \frac{\color{blue}{0 - \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
sub0-neg [=>]33.4 | \[ \frac{\color{blue}{-\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
neg-mul-1 [=>]33.4 | \[ \frac{\color{blue}{-1 \cdot \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
*-commutative [=>]33.4 | \[ \frac{\color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot -1}}{2 \cdot a}
\] |
associate-*r/ [<=]33.3 | \[ \color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{-1}{2 \cdot a}}
\] |
Taylor expanded in b around -inf 93.5%
Simplified93.5%
[Start]93.5 | \[ -1 \cdot \frac{b}{a}
\] |
|---|---|
associate-*r/ [=>]93.5 | \[ \color{blue}{\frac{-1 \cdot b}{a}}
\] |
mul-1-neg [=>]93.5 | \[ \frac{\color{blue}{-b}}{a}
\] |
if -3.09999999999999992e83 < b < -6.00000000000000044e-308Initial program 86.0%
if -6.00000000000000044e-308 < b < 6.79999999999999985e-24Initial program 61.6%
Simplified61.5%
[Start]61.6 | \[ \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
|---|---|
neg-sub0 [=>]61.6 | \[ \frac{\color{blue}{\left(0 - b\right)} + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
associate-+l- [=>]61.6 | \[ \frac{\color{blue}{0 - \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
sub0-neg [=>]61.6 | \[ \frac{\color{blue}{-\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
neg-mul-1 [=>]61.6 | \[ \frac{\color{blue}{-1 \cdot \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
*-commutative [=>]61.6 | \[ \frac{\color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot -1}}{2 \cdot a}
\] |
associate-*r/ [<=]61.5 | \[ \color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{-1}{2 \cdot a}}
\] |
Applied egg-rr37.0%
[Start]61.5 | \[ \left(b - \sqrt{\mathsf{fma}\left(a, c \cdot -4, b \cdot b\right)}\right) \cdot \frac{-0.5}{a}
\] |
|---|---|
fma-udef [=>]61.5 | \[ \left(b - \sqrt{\color{blue}{a \cdot \left(c \cdot -4\right) + b \cdot b}}\right) \cdot \frac{-0.5}{a}
\] |
add-sqr-sqrt [=>]29.6 | \[ \left(b - \sqrt{\color{blue}{\left(\sqrt{a} \cdot \sqrt{a}\right)} \cdot \left(c \cdot -4\right) + b \cdot b}\right) \cdot \frac{-0.5}{a}
\] |
add-sqr-sqrt [=>]28.9 | \[ \left(b - \sqrt{\left(\sqrt{a} \cdot \sqrt{a}\right) \cdot \color{blue}{\left(\sqrt{c \cdot -4} \cdot \sqrt{c \cdot -4}\right)} + b \cdot b}\right) \cdot \frac{-0.5}{a}
\] |
unswap-sqr [=>]28.9 | \[ \left(b - \sqrt{\color{blue}{\left(\sqrt{a} \cdot \sqrt{c \cdot -4}\right) \cdot \left(\sqrt{a} \cdot \sqrt{c \cdot -4}\right)} + b \cdot b}\right) \cdot \frac{-0.5}{a}
\] |
hypot-def [=>]37.0 | \[ \left(b - \color{blue}{\mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)}\right) \cdot \frac{-0.5}{a}
\] |
Applied egg-rr50.9%
[Start]37.0 | \[ \left(b - \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)\right) \cdot \frac{-0.5}{a}
\] |
|---|---|
*-commutative [=>]37.0 | \[ \color{blue}{\frac{-0.5}{a} \cdot \left(b - \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)\right)}
\] |
clear-num [=>]37.0 | \[ \color{blue}{\frac{1}{\frac{a}{-0.5}}} \cdot \left(b - \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)\right)
\] |
flip-- [=>]28.9 | \[ \frac{1}{\frac{a}{-0.5}} \cdot \color{blue}{\frac{b \cdot b - \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right) \cdot \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)}{b + \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)}}
\] |
frac-times [=>]24.5 | \[ \color{blue}{\frac{1 \cdot \left(b \cdot b - \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right) \cdot \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)\right)}{\frac{a}{-0.5} \cdot \left(b + \mathsf{hypot}\left(\sqrt{a} \cdot \sqrt{c \cdot -4}, b\right)\right)}}
\] |
Simplified65.3%
[Start]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\left(a \cdot -2\right) \cdot \left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right)}
\] |
|---|---|
*-commutative [<=]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\color{blue}{\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot \left(a \cdot -2\right)}}
\] |
/-rgt-identity [<=]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\color{blue}{\frac{\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot \left(a \cdot -2\right)}{1}}}
\] |
associate-*r* [=>]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\frac{\color{blue}{\left(\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot a\right) \cdot -2}}{1}}
\] |
associate-/l* [=>]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\color{blue}{\frac{\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot a}{\frac{1}{-2}}}}
\] |
metadata-eval [=>]50.9 | \[ \frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{\frac{\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot a}{\color{blue}{-0.5}}}
\] |
associate-/l* [<=]50.9 | \[ \color{blue}{\frac{\left(b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)\right) \cdot -0.5}{\left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right) \cdot a}}
\] |
*-commutative [<=]50.9 | \[ \frac{\left(b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)\right) \cdot -0.5}{\color{blue}{a \cdot \left(b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)\right)}}
\] |
times-frac [=>]60.3 | \[ \color{blue}{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(a \cdot -4\right) \cdot c\right)}{a} \cdot \frac{-0.5}{b + \mathsf{hypot}\left(\sqrt{\left(a \cdot -4\right) \cdot c}, b\right)}}
\] |
Applied egg-rr14.3%
[Start]65.3 | \[ \frac{-a \cdot \left(c \cdot -4\right)}{a} \cdot \frac{-0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
|---|---|
expm1-log1p-u [=>]48.1 | \[ \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{-a \cdot \left(c \cdot -4\right)}{a} \cdot \frac{-0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}\right)\right)}
\] |
expm1-udef [=>]17.4 | \[ \color{blue}{e^{\mathsf{log1p}\left(\frac{-a \cdot \left(c \cdot -4\right)}{a} \cdot \frac{-0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}\right)} - 1}
\] |
Simplified78.2%
[Start]14.3 | \[ e^{\mathsf{log1p}\left(\frac{\frac{a}{\frac{a}{c \cdot 4}}}{\left(b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)\right) \cdot -2}\right)} - 1
\] |
|---|---|
expm1-def [=>]44.9 | \[ \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{a}{\frac{a}{c \cdot 4}}}{\left(b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)\right) \cdot -2}\right)\right)}
\] |
expm1-log1p [=>]57.7 | \[ \color{blue}{\frac{\frac{a}{\frac{a}{c \cdot 4}}}{\left(b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)\right) \cdot -2}}
\] |
associate-/l/ [<=]57.7 | \[ \color{blue}{\frac{\frac{\frac{a}{\frac{a}{c \cdot 4}}}{-2}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}}
\] |
metadata-eval [<=]57.7 | \[ \frac{\frac{\frac{a}{\frac{a}{c \cdot 4}}}{\color{blue}{\frac{1}{-0.5}}}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
associate-/l* [<=]57.7 | \[ \frac{\color{blue}{\frac{\frac{a}{\frac{a}{c \cdot 4}} \cdot -0.5}{1}}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
/-rgt-identity [=>]57.7 | \[ \frac{\color{blue}{\frac{a}{\frac{a}{c \cdot 4}} \cdot -0.5}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
associate-/r/ [=>]78.3 | \[ \frac{\color{blue}{\left(\frac{a}{a} \cdot \left(c \cdot 4\right)\right)} \cdot -0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
*-inverses [=>]78.3 | \[ \frac{\left(\color{blue}{1} \cdot \left(c \cdot 4\right)\right) \cdot -0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
*-lft-identity [=>]78.3 | \[ \frac{\color{blue}{\left(c \cdot 4\right)} \cdot -0.5}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
associate-*l* [=>]78.3 | \[ \frac{\color{blue}{c \cdot \left(4 \cdot -0.5\right)}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
metadata-eval [=>]78.3 | \[ \frac{c \cdot \color{blue}{-2}}{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}
\] |
associate-/l* [=>]78.3 | \[ \color{blue}{\frac{c}{\frac{b + \mathsf{hypot}\left(\sqrt{a \cdot \left(c \cdot -4\right)}, b\right)}{-2}}}
\] |
if 6.79999999999999985e-24 < b Initial program 14.4%
Simplified14.4%
[Start]14.4 | \[ \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
|---|---|
neg-sub0 [=>]14.4 | \[ \frac{\color{blue}{\left(0 - b\right)} + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\] |
associate-+l- [=>]14.4 | \[ \frac{\color{blue}{0 - \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
sub0-neg [=>]14.4 | \[ \frac{\color{blue}{-\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
neg-mul-1 [=>]14.4 | \[ \frac{\color{blue}{-1 \cdot \left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}
\] |
*-commutative [=>]14.4 | \[ \frac{\color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot -1}}{2 \cdot a}
\] |
associate-*r/ [<=]14.4 | \[ \color{blue}{\left(b - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{-1}{2 \cdot a}}
\] |
Taylor expanded in b around inf 89.3%
Simplified89.3%
[Start]89.3 | \[ -1 \cdot \frac{c}{b}
\] |
|---|---|
associate-*r/ [=>]89.3 | \[ \color{blue}{\frac{-1 \cdot c}{b}}
\] |
mul-1-neg [=>]89.3 | \[ \frac{\color{blue}{-c}}{b}
\] |
Final simplification86.9%
| Alternative 1 | |
|---|---|
| Accuracy | 84.1% |
| Cost | 7624 |
| Alternative 2 | |
|---|---|
| Accuracy | 78.7% |
| Cost | 7368 |
| Alternative 3 | |
|---|---|
| Accuracy | 64.9% |
| Cost | 708 |
| Alternative 4 | |
|---|---|
| Accuracy | 38.5% |
| Cost | 388 |
| Alternative 5 | |
|---|---|
| Accuracy | 64.9% |
| Cost | 388 |
| Alternative 6 | |
|---|---|
| Accuracy | 2.6% |
| Cost | 192 |
| Alternative 7 | |
|---|---|
| Accuracy | 11.7% |
| Cost | 192 |
herbie shell --seed 2023147
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))