\[\left(\left(1.1102230246251565 \cdot 10^{-16} < a \land a < 9007199254740992\right) \land \left(1.1102230246251565 \cdot 10^{-16} < b \land b < 9007199254740992\right)\right) \land \left(1.1102230246251565 \cdot 10^{-16} < c \land c < 9007199254740992\right)\]
(FPCore (a b c)
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))
↓
(FPCore (a b c)
:precision binary64
(fma
-0.5625
(/ (* (* (* a a) c) (* c c)) (pow b 5.0))
(fma
-0.16666666666666666
(* (* (pow (* c a) 4.0) 6.328125) (/ (pow b -7.0) a))
(fma -0.5 (/ c b) (/ (* -0.375 (* (* c c) a)) (pow b 3.0))))))
double code(double a, double b, double c) {
return (-b + sqrt(((b * b) - ((3.0 * a) * c)))) / (3.0 * a);
}
↓
double code(double a, double b, double c) {
return fma(-0.5625, ((((a * a) * c) * (c * c)) / pow(b, 5.0)), fma(-0.16666666666666666, ((pow((c * a), 4.0) * 6.328125) * (pow(b, -7.0) / a)), fma(-0.5, (c / b), ((-0.375 * ((c * c) * a)) / pow(b, 3.0)))));
}
function code(a, b, c)
return Float64(Float64(Float64(-b) + sqrt(Float64(Float64(b * b) - Float64(Float64(3.0 * a) * c)))) / Float64(3.0 * a))
end
↓
function code(a, b, c)
return fma(-0.5625, Float64(Float64(Float64(Float64(a * a) * c) * Float64(c * c)) / (b ^ 5.0)), fma(-0.16666666666666666, Float64(Float64((Float64(c * a) ^ 4.0) * 6.328125) * Float64((b ^ -7.0) / a)), fma(-0.5, Float64(c / b), Float64(Float64(-0.375 * Float64(Float64(c * c) * a)) / (b ^ 3.0)))))
end
herbie shell --seed 2022325
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (and (and (< 1.1102230246251565e-16 a) (< a 9007199254740992.0)) (and (< 1.1102230246251565e-16 b) (< b 9007199254740992.0))) (and (< 1.1102230246251565e-16 c) (< c 9007199254740992.0)))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))