\sin^{-1} \left(\sqrt{\left(\left(X \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(X \cdot \sin \left(\frac{a}{2}\right)\right) + \left(Y \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(Y \cdot \sin \left(\frac{a}{2}\right)\right)\right) + \left(Z \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(Z \cdot \sin \left(\frac{a}{2}\right)\right)}\right)\sin^{-1} \left(\sqrt{\left(\left(X \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(X \cdot \sin \left(\frac{a}{2}\right)\right) + \left(Y \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(Y \cdot \sin \left(\frac{a}{2}\right)\right)\right) + \left(Z \cdot \sin \left(\frac{a}{2}\right)\right) \cdot \left(Z \cdot \sin \left(\frac{a}{2}\right)\right)}\right)double code(double X, double a, double Y, double Z) {
return ((double) asin(((double) sqrt(((double) (((double) (((double) (((double) (X * ((double) sin(((double) (a / 2.0)))))) * ((double) (X * ((double) sin(((double) (a / 2.0)))))))) + ((double) (((double) (Y * ((double) sin(((double) (a / 2.0)))))) * ((double) (Y * ((double) sin(((double) (a / 2.0)))))))))) + ((double) (((double) (Z * ((double) sin(((double) (a / 2.0)))))) * ((double) (Z * ((double) sin(((double) (a / 2.0))))))))))))));
}
double code(double X, double a, double Y, double Z) {
return ((double) asin(((double) sqrt(((double) (((double) (((double) (((double) (X * ((double) sin(((double) (a / 2.0)))))) * ((double) (X * ((double) sin(((double) (a / 2.0)))))))) + ((double) (((double) (Y * ((double) sin(((double) (a / 2.0)))))) * ((double) (Y * ((double) sin(((double) (a / 2.0)))))))))) + ((double) (((double) (Z * ((double) sin(((double) (a / 2.0)))))) * ((double) (Z * ((double) sin(((double) (a / 2.0))))))))))))));
}



Bits error versus X



Bits error versus a



Bits error versus Y



Bits error versus Z
Results
Initial program 13.6
Final simplification13.6
herbie shell --seed 2020152
(FPCore (X a Y Z)
:name "(asin (sqrt (+ (+ (* (* X (sin (/ a 2))) (* X (sin (/ a 2)))) (* (* Y (sin (/ a 2))) (* Y (sin (/ a 2))))) (* (* Z (sin (/ a 2))) (* Z (sin (/ a 2)))))))"
:precision binary64
(asin (sqrt (+ (+ (* (* X (sin (/ a 2.0))) (* X (sin (/ a 2.0)))) (* (* Y (sin (/ a 2.0))) (* Y (sin (/ a 2.0))))) (* (* Z (sin (/ a 2.0))) (* Z (sin (/ a 2.0))))))))