a \cdot a - b \cdot b
\begin{array}{l}
\mathbf{if}\;a \cdot a \leq 3.6361091965505894 \cdot 10^{+301}:\\
\;\;\;\;a \cdot a - b \cdot b\\
\mathbf{else}:\\
\;\;\;\;{a}^{2}\\
\end{array}
(FPCore (a b) :precision binary64 (- (* a a) (* b b)))
(FPCore (a b) :precision binary64 (if (<= (* a a) 3.6361091965505894e+301) (- (* a a) (* b b)) (pow a 2.0)))
double code(double a, double b) {
return (a * a) - (b * b);
}
double code(double a, double b) {
double tmp;
if ((a * a) <= 3.6361091965505894e+301) {
tmp = (a * a) - (b * b);
} else {
tmp = pow(a, 2.0);
}
return tmp;
}




Bits error versus a




Bits error versus b
Results
| Original | 3.9 |
|---|---|
| Target | 0.0 |
| Herbie | 2.1 |
if (*.f64 a a) < 3.63610919655058944e301Initial program 0.0
if 3.63610919655058944e301 < (*.f64 a a) Initial program 15.4
Taylor expanded in a around inf 8.3
Final simplification2.1
herbie shell --seed 2022068
(FPCore (a b)
:name "Difference of squares"
:precision binary64
:herbie-target
(* (+ a b) (- a b))
(- (* a a) (* b b)))