\left(\left(\left(\sqrt{x + 1} - \sqrt{x}\right) + \left(\sqrt{y + 1} - \sqrt{y}\right)\right) + \left(\sqrt{z + 1} - \sqrt{z}\right)\right) + \left(\sqrt{t + 1} - \sqrt{t}\right)
\begin{array}{l}
t_1 := \sqrt{1 + x}\\
t_2 := \sqrt{y + 1}\\
t_3 := t_2 - \sqrt{y}\\
t_4 := \sqrt{1 + z}\\
t_5 := \sqrt{1 + t} - \sqrt{t}\\
\mathbf{if}\;t_3 \leq 0.6460180036065553:\\
\;\;\;\;\begin{array}{l}
t_6 := \sqrt{\frac{1}{t_2 + \sqrt{y}}}\\
\left(\left(\frac{1}{t_1 + \sqrt{x}} + t_6 \cdot t_6\right) + \left(t_4 - \sqrt{z}\right)\right) + t_5
\end{array}\\
\mathbf{else}:\\
\;\;\;\;t_5 + \left(\left(t_3 + \left(t_1 - \sqrt{x}\right)\right) + \frac{1}{t_4 + \sqrt{z}}\right)\\
\end{array}
(FPCore (x y z t) :precision binary64 (+ (+ (+ (- (sqrt (+ x 1.0)) (sqrt x)) (- (sqrt (+ y 1.0)) (sqrt y))) (- (sqrt (+ z 1.0)) (sqrt z))) (- (sqrt (+ t 1.0)) (sqrt t))))
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (sqrt (+ 1.0 x)))
(t_2 (sqrt (+ y 1.0)))
(t_3 (- t_2 (sqrt y)))
(t_4 (sqrt (+ 1.0 z)))
(t_5 (- (sqrt (+ 1.0 t)) (sqrt t))))
(if (<= t_3 0.6460180036065553)
(let* ((t_6 (sqrt (/ 1.0 (+ t_2 (sqrt y))))))
(+ (+ (+ (/ 1.0 (+ t_1 (sqrt x))) (* t_6 t_6)) (- t_4 (sqrt z))) t_5))
(+ t_5 (+ (+ t_3 (- t_1 (sqrt x))) (/ 1.0 (+ t_4 (sqrt z))))))))double code(double x, double y, double z, double t) {
return (((sqrt(x + 1.0) - sqrt(x)) + (sqrt(y + 1.0) - sqrt(y))) + (sqrt(z + 1.0) - sqrt(z))) + (sqrt(t + 1.0) - sqrt(t));
}
double code(double x, double y, double z, double t) {
double t_1 = sqrt(1.0 + x);
double t_2 = sqrt(y + 1.0);
double t_3 = t_2 - sqrt(y);
double t_4 = sqrt(1.0 + z);
double t_5 = sqrt(1.0 + t) - sqrt(t);
double tmp;
if (t_3 <= 0.6460180036065553) {
double t_6_1 = sqrt(1.0 / (t_2 + sqrt(y)));
tmp = (((1.0 / (t_1 + sqrt(x))) + (t_6_1 * t_6_1)) + (t_4 - sqrt(z))) + t_5;
} else {
tmp = t_5 + ((t_3 + (t_1 - sqrt(x))) + (1.0 / (t_4 + sqrt(z))));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if (-.f64 (sqrt.f64 (+.f64 y 1)) (sqrt.f64 y)) < 0.64601800360655526Initial program 13.4
rmApplied flip--_binary6413.2
Simplified4.4
Simplified4.4
rmApplied flip--_binary644.1
Simplified0.5
Simplified0.5
rmApplied add-sqr-sqrt_binary640.5
if 0.64601800360655526 < (-.f64 (sqrt.f64 (+.f64 y 1)) (sqrt.f64 y)) Initial program 1.6
rmApplied flip--_binary641.5
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2021207
(FPCore (x y z t)
:name "Main:z from "
:precision binary64
:herbie-target
(+ (+ (+ (/ 1.0 (+ (sqrt (+ x 1.0)) (sqrt x))) (/ 1.0 (+ (sqrt (+ y 1.0)) (sqrt y)))) (/ 1.0 (+ (sqrt (+ z 1.0)) (sqrt z)))) (- (sqrt (+ t 1.0)) (sqrt t)))
(+ (+ (+ (- (sqrt (+ x 1.0)) (sqrt x)) (- (sqrt (+ y 1.0)) (sqrt y))) (- (sqrt (+ z 1.0)) (sqrt z))) (- (sqrt (+ t 1.0)) (sqrt t))))