\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{\mathsf{fma}\left(-h, h, g \cdot g\right)}\right)}}{\sqrt[3]{\sqrt[3]{2 \cdot a}} \cdot \left(\sqrt[3]{\sqrt[3]{2 \cdot a}} \cdot \sqrt[3]{\sqrt[3]{2 \cdot a}}\right)} + \sqrt[3]{\frac{\left(\sqrt{\left(g - h\right) \cdot \left(g + h\right)} - g\right) \cdot 1}{2}} \cdot \sqrt[3]{\frac{1}{a}}double f(double g, double h, double a) {
double r127743 = 1.0;
double r127744 = 2.0;
double r127745 = a;
double r127746 = r127744 * r127745;
double r127747 = r127743 / r127746;
double r127748 = g;
double r127749 = -r127748;
double r127750 = r127748 * r127748;
double r127751 = h;
double r127752 = r127751 * r127751;
double r127753 = r127750 - r127752;
double r127754 = sqrt(r127753);
double r127755 = r127749 + r127754;
double r127756 = r127747 * r127755;
double r127757 = cbrt(r127756);
double r127758 = r127749 - r127754;
double r127759 = r127747 * r127758;
double r127760 = cbrt(r127759);
double r127761 = r127757 + r127760;
return r127761;
}
double f(double g, double h, double a) {
double r127762 = 1.0;
double r127763 = g;
double r127764 = -r127763;
double r127765 = h;
double r127766 = -r127765;
double r127767 = r127763 * r127763;
double r127768 = fma(r127766, r127765, r127767);
double r127769 = sqrt(r127768);
double r127770 = r127764 - r127769;
double r127771 = r127762 * r127770;
double r127772 = cbrt(r127771);
double r127773 = 2.0;
double r127774 = a;
double r127775 = r127773 * r127774;
double r127776 = cbrt(r127775);
double r127777 = cbrt(r127776);
double r127778 = r127777 * r127777;
double r127779 = r127777 * r127778;
double r127780 = r127772 / r127779;
double r127781 = r127763 - r127765;
double r127782 = r127763 + r127765;
double r127783 = r127781 * r127782;
double r127784 = sqrt(r127783);
double r127785 = r127784 - r127763;
double r127786 = r127785 * r127762;
double r127787 = r127786 / r127773;
double r127788 = cbrt(r127787);
double r127789 = 1.0;
double r127790 = r127789 / r127774;
double r127791 = cbrt(r127790);
double r127792 = r127788 * r127791;
double r127793 = r127780 + r127792;
return r127793;
}



Bits error versus g



Bits error versus h



Bits error versus a
Initial program 35.9
Simplified35.9
rmApplied div-inv35.9
Applied cbrt-prod33.9
Simplified33.9
rmApplied frac-times33.9
Applied cbrt-div32.1
Simplified32.1
Simplified32.1
rmApplied add-cube-cbrt32.3
Simplified32.3
Simplified32.3
Final simplification32.3
herbie shell --seed 2019194 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))