(FPCore (a c b)
:precision binary64
(/ (- (* a c) (pow b 2.0)) (- (+ a c) (* 2.0 b))))
↓
(FPCore (a c b)
:precision binary64
(let* ((t_0 (- (* a a) (pow (fma b -2.0 c) 2.0))))
(if (or (<= b -3.2e-184) (not (<= b 2.85e-202)))
(* (- (/ a (/ t_0 c)) (/ b (/ t_0 b))) (+ a (- (* b 2.0) c)))
(* a (/ c (+ a c))))))
double code(double a, double c, double b) {
return ((a * c) - pow(b, 2.0)) / ((a + c) - (2.0 * b));
}
↓
double code(double a, double c, double b) {
double t_0 = (a * a) - pow(fma(b, -2.0, c), 2.0);
double tmp;
if ((b <= -3.2e-184) || !(b <= 2.85e-202)) {
tmp = ((a / (t_0 / c)) - (b / (t_0 / b))) * (a + ((b * 2.0) - c));
} else {
tmp = a * (c / (a + c));
}
return tmp;
}
function code(a, c, b)
return Float64(Float64(Float64(a * c) - (b ^ 2.0)) / Float64(Float64(a + c) - Float64(2.0 * b)))
end
↓
function code(a, c, b)
t_0 = Float64(Float64(a * a) - (fma(b, -2.0, c) ^ 2.0))
tmp = 0.0
if ((b <= -3.2e-184) || !(b <= 2.85e-202))
tmp = Float64(Float64(Float64(a / Float64(t_0 / c)) - Float64(b / Float64(t_0 / b))) * Float64(a + Float64(Float64(b * 2.0) - c)));
else
tmp = Float64(a * Float64(c / Float64(a + c)));
end
return tmp
end
herbie shell --seed 1
(FPCore (a c b)
:name "(a*c - b^2)/(a + c - 2*b)"
:precision binary64
:pre (and (and (and (<= -1.0 a) (<= a 1.0)) (and (<= -1.0 c) (<= c 1.0))) (and (<= -1.0 b) (<= b 1.0)))
(/ (- (* a c) (pow b 2.0)) (- (+ a c) (* 2.0 b))))