\[\left(\left(1.0536712127723509 \cdot 10^{-8} < a \land a < 94906265.62425156\right) \land \left(1.0536712127723509 \cdot 10^{-8} < b \land b < 94906265.62425156\right)\right) \land \left(1.0536712127723509 \cdot 10^{-8} < c \land c < 94906265.62425156\right)\]
(FPCore (a b c)
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))
↓
(FPCore (a b c)
:precision binary64
(-
(fma
-2.0
(* (* c (* (* c c) (pow b -5.0))) (* a a))
(* -5.0 (/ (pow (* c a) 3.0) (/ (pow b 7.0) c))))
(fma (* (/ c b) (/ c (* b b))) a (/ 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) {
return fma(-2.0, ((c * ((c * c) * pow(b, -5.0))) * (a * a)), (-5.0 * (pow((c * a), 3.0) / (pow(b, 7.0) / c)))) - fma(((c / b) * (c / (b * b))), a, (c / b));
}
function code(a, b, c)
return Float64(Float64(Float64(-b) + sqrt(Float64(Float64(b * b) - Float64(Float64(4.0 * a) * c)))) / Float64(2.0 * a))
end
↓
function code(a, b, c)
return Float64(fma(-2.0, Float64(Float64(c * Float64(Float64(c * c) * (b ^ -5.0))) * Float64(a * a)), Float64(-5.0 * Float64((Float64(c * a) ^ 3.0) / Float64((b ^ 7.0) / c)))) - fma(Float64(Float64(c / b) * Float64(c / Float64(b * b))), a, Float64(c / b)))
end
herbie shell --seed 2022284
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (and (and (< 1.0536712127723509e-8 a) (< a 94906265.62425156)) (and (< 1.0536712127723509e-8 b) (< b 94906265.62425156))) (and (< 1.0536712127723509e-8 c) (< c 94906265.62425156)))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))