\tan^{-1} \left(\sqrt{\left(\left(\tan \left(\frac{s}{2}\right) \cdot \tan \left(\frac{s - a}{2}\right)\right) \cdot \tan \left(\frac{s - b}{2}\right)\right) \cdot \tan \left(\frac{s - c}{2}\right)}\right)\tan^{-1} \left(\sqrt{\left(\left(\tan \left(\frac{s}{2}\right) \cdot \tan \left(\frac{s - a}{2}\right)\right) \cdot \tan \left(\frac{s - b}{2}\right)\right) \cdot \tan \left(\frac{s - c}{2}\right)}\right)double code(double s, double a, double b, double c) {
return ((double) atan(((double) sqrt(((double) (((double) (((double) (((double) tan(((double) (s / 2.0)))) * ((double) tan(((double) (((double) (s - a)) / 2.0)))))) * ((double) tan(((double) (((double) (s - b)) / 2.0)))))) * ((double) tan(((double) (((double) (s - c)) / 2.0))))))))));
}
double code(double s, double a, double b, double c) {
return ((double) atan(((double) sqrt(((double) (((double) (((double) (((double) tan(((double) (s / 2.0)))) * ((double) tan(((double) (((double) (s - a)) / 2.0)))))) * ((double) tan(((double) (((double) (s - b)) / 2.0)))))) * ((double) tan(((double) (((double) (s - c)) / 2.0))))))))));
}



Bits error versus s



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 33.6
Final simplification33.6
herbie shell --seed 2020153
(FPCore (s a b c)
:name "(atan (sqrt (* (* (* (tan (/ s 2)) (tan (/ (- s a) 2))) (tan (/ (- s b) 2))) (tan (/ (- s c) 2)))))"
:precision binary64
(atan (sqrt (* (* (* (tan (/ s 2.0)) (tan (/ (- s a) 2.0))) (tan (/ (- s b) 2.0))) (tan (/ (- s c) 2.0))))))