2 \cdot \cos \left(\frac{2 \cdot \pi}{3} + \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)2 \cdot \sqrt[3]{{\left(\sqrt[3]{{\left(\cos \left(\mathsf{fma}\left(\pi, \frac{2}{3}, \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)\right)\right)}^{2}} \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\pi, \frac{2}{3}, \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)\right)}\right)}^{3}}double f(double g, double h) {
double r81021 = 2.0;
double r81022 = atan2(1.0, 0.0);
double r81023 = r81021 * r81022;
double r81024 = 3.0;
double r81025 = r81023 / r81024;
double r81026 = g;
double r81027 = -r81026;
double r81028 = h;
double r81029 = r81027 / r81028;
double r81030 = acos(r81029);
double r81031 = r81030 / r81024;
double r81032 = r81025 + r81031;
double r81033 = cos(r81032);
double r81034 = r81021 * r81033;
return r81034;
}
double f(double g, double h) {
double r81035 = 2.0;
double r81036 = atan2(1.0, 0.0);
double r81037 = 3.0;
double r81038 = r81035 / r81037;
double r81039 = g;
double r81040 = -r81039;
double r81041 = h;
double r81042 = r81040 / r81041;
double r81043 = acos(r81042);
double r81044 = r81043 / r81037;
double r81045 = fma(r81036, r81038, r81044);
double r81046 = cos(r81045);
double r81047 = 2.0;
double r81048 = pow(r81046, r81047);
double r81049 = cbrt(r81048);
double r81050 = cbrt(r81046);
double r81051 = r81049 * r81050;
double r81052 = 3.0;
double r81053 = pow(r81051, r81052);
double r81054 = cbrt(r81053);
double r81055 = r81035 * r81054;
return r81055;
}



Bits error versus g



Bits error versus h
Initial program 1.0
Simplified1.0
rmApplied add-sqr-sqrt1.0
Applied *-un-lft-identity1.0
Applied times-frac1.0
rmApplied add-cbrt-cube1.0
Simplified1.0
rmApplied add-cube-cbrt1.0
Simplified0.1
Final simplification0.1
herbie shell --seed 2019303 +o rules:numerics
(FPCore (g h)
:name "2-ancestry mixing, negative discriminant"
:precision binary64
(* 2 (cos (+ (/ (* 2 PI) 3) (/ (acos (/ (- g) h)) 3)))))