Average Error: 40.9 → 25.2
Time: 1.3min
Precision: binary64
\[\frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} \cdot \frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} - \left(4 \cdot \frac{\frac{{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{x-scale}}{x-scale}\right) \cdot \frac{\frac{{\left(a \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{y-scale}}{y-scale} \]
\[\begin{array}{l} \mathbf{if}\;y-scale \leq -2.3171389343851727 \cdot 10^{+211}:\\ \;\;\;\;0\\ \mathbf{elif}\;y-scale \leq 3.2690170656138226 \cdot 10^{+59}:\\ \;\;\;\;\begin{array}{l} t_0 := {\left(a \cdot b\right)}^{2}\\ t_1 := 0.005555555555555556 \cdot \left(angle \cdot \pi\right)\\ t_2 := \cos t_1\\ t_3 := \sin t_1\\ -\frac{\frac{\mathsf{fma}\left(4, \left(t_0 \cdot {t_3}^{4}\right) \cdot {x-scale}^{-2}, \mathsf{fma}\left(4, \frac{t_0 \cdot {t_2}^{4}}{x-scale \cdot x-scale}, 8 \cdot \left({x-scale}^{-2} \cdot {\left(\left(a \cdot t_2\right) \cdot \left(b \cdot t_3\right)\right)}^{2}\right)\right)\right)}{y-scale}}{y-scale} \end{array}\\ \mathbf{else}:\\ \;\;\;\;0\\ \end{array} \]
\frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} \cdot \frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} - \left(4 \cdot \frac{\frac{{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{x-scale}}{x-scale}\right) \cdot \frac{\frac{{\left(a \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{y-scale}}{y-scale}
\begin{array}{l}
\mathbf{if}\;y-scale \leq -2.3171389343851727 \cdot 10^{+211}:\\
\;\;\;\;0\\

\mathbf{elif}\;y-scale \leq 3.2690170656138226 \cdot 10^{+59}:\\
\;\;\;\;\begin{array}{l}
t_0 := {\left(a \cdot b\right)}^{2}\\
t_1 := 0.005555555555555556 \cdot \left(angle \cdot \pi\right)\\
t_2 := \cos t_1\\
t_3 := \sin t_1\\
-\frac{\frac{\mathsf{fma}\left(4, \left(t_0 \cdot {t_3}^{4}\right) \cdot {x-scale}^{-2}, \mathsf{fma}\left(4, \frac{t_0 \cdot {t_2}^{4}}{x-scale \cdot x-scale}, 8 \cdot \left({x-scale}^{-2} \cdot {\left(\left(a \cdot t_2\right) \cdot \left(b \cdot t_3\right)\right)}^{2}\right)\right)\right)}{y-scale}}{y-scale}
\end{array}\\

\mathbf{else}:\\
\;\;\;\;0\\


\end{array}
(FPCore (a b angle x-scale y-scale)
 :precision binary64
 (-
  (*
   (/
    (/
     (*
      (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI)))
      (cos (* (/ angle 180.0) PI)))
     x-scale)
    y-scale)
   (/
    (/
     (*
      (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI)))
      (cos (* (/ angle 180.0) PI)))
     x-scale)
    y-scale))
  (*
   (*
    4.0
    (/
     (/
      (+
       (pow (* a (sin (* (/ angle 180.0) PI))) 2.0)
       (pow (* b (cos (* (/ angle 180.0) PI))) 2.0))
      x-scale)
     x-scale))
   (/
    (/
     (+
      (pow (* a (cos (* (/ angle 180.0) PI))) 2.0)
      (pow (* b (sin (* (/ angle 180.0) PI))) 2.0))
     y-scale)
    y-scale))))
(FPCore (a b angle x-scale y-scale)
 :precision binary64
 (if (<= y-scale -2.3171389343851727e+211)
   0.0
   (if (<= y-scale 3.2690170656138226e+59)
     (let* ((t_0 (pow (* a b) 2.0))
            (t_1 (* 0.005555555555555556 (* angle PI)))
            (t_2 (cos t_1))
            (t_3 (sin t_1)))
       (-
        (/
         (/
          (fma
           4.0
           (* (* t_0 (pow t_3 4.0)) (pow x-scale -2.0))
           (fma
            4.0
            (/ (* t_0 (pow t_2 4.0)) (* x-scale x-scale))
            (* 8.0 (* (pow x-scale -2.0) (pow (* (* a t_2) (* b t_3)) 2.0)))))
          y-scale)
         y-scale)))
     0.0)))
double code(double a, double b, double angle, double x_45_scale, double y_45_scale) {
	return ((((((2.0 * (pow(b, 2.0) - pow(a, 2.0))) * sin((angle / 180.0) * ((double) M_PI))) * cos((angle / 180.0) * ((double) M_PI))) / x_45_scale) / y_45_scale) * (((((2.0 * (pow(b, 2.0) - pow(a, 2.0))) * sin((angle / 180.0) * ((double) M_PI))) * cos((angle / 180.0) * ((double) M_PI))) / x_45_scale) / y_45_scale)) - ((4.0 * (((pow((a * sin((angle / 180.0) * ((double) M_PI))), 2.0) + pow((b * cos((angle / 180.0) * ((double) M_PI))), 2.0)) / x_45_scale) / x_45_scale)) * (((pow((a * cos((angle / 180.0) * ((double) M_PI))), 2.0) + pow((b * sin((angle / 180.0) * ((double) M_PI))), 2.0)) / y_45_scale) / y_45_scale));
}
double code(double a, double b, double angle, double x_45_scale, double y_45_scale) {
	double tmp;
	if (y_45_scale <= -2.3171389343851727e+211) {
		tmp = 0.0;
	} else if (y_45_scale <= 3.2690170656138226e+59) {
		double t_0 = pow((a * b), 2.0);
		double t_1 = 0.005555555555555556 * (angle * ((double) M_PI));
		double t_2 = cos(t_1);
		double t_3 = sin(t_1);
		tmp = -((fma(4.0, ((t_0 * pow(t_3, 4.0)) * pow(x_45_scale, -2.0)), fma(4.0, ((t_0 * pow(t_2, 4.0)) / (x_45_scale * x_45_scale)), (8.0 * (pow(x_45_scale, -2.0) * pow(((a * t_2) * (b * t_3)), 2.0))))) / y_45_scale) / y_45_scale);
	} else {
		tmp = 0.0;
	}
	return tmp;
}

Error

Bits error versus a

Bits error versus b

Bits error versus angle

Bits error versus x-scale

Bits error versus y-scale

Derivation

  1. Split input into 2 regimes
  2. if y-scale < -2.3171389343851727e211 or 3.2690170656138226e59 < y-scale

    1. Initial program 37.2

      \[\frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} \cdot \frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} - \left(4 \cdot \frac{\frac{{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{x-scale}}{x-scale}\right) \cdot \frac{\frac{{\left(a \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{y-scale}}{y-scale} \]
    2. Taylor expanded in b around 0 36.0

      \[\leadsto \color{blue}{4 \cdot \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2} \cdot \left({a}^{4} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2}\right)}{{y-scale}^{2} \cdot {x-scale}^{2}} - 4 \cdot \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2} \cdot \left({a}^{4} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2}\right)}{{x-scale}^{2} \cdot {y-scale}^{2}}} \]
    3. Simplified22.2

      \[\leadsto \color{blue}{0} \]

    if -2.3171389343851727e211 < y-scale < 3.2690170656138226e59

    1. Initial program 43.0

      \[\frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} \cdot \frac{\frac{\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right) \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)}{x-scale}}{y-scale} - \left(4 \cdot \frac{\frac{{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{x-scale}}{x-scale}\right) \cdot \frac{\frac{{\left(a \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}}{y-scale}}{y-scale} \]
    2. Taylor expanded in y-scale around 0 40.8

      \[\leadsto \color{blue}{-1 \cdot \frac{4 \cdot \frac{{a}^{2} \cdot \left({b}^{2} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}\right)}{{x-scale}^{2}} + \left(8 \cdot \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2} \cdot \left({a}^{2} \cdot \left({b}^{2} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2}\right)\right)}{{x-scale}^{2}} + 4 \cdot \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4} \cdot \left({a}^{2} \cdot {b}^{2}\right)}{{x-scale}^{2}}\right)}{{y-scale}^{2}}} \]
    3. Simplified40.8

      \[\leadsto \color{blue}{-\frac{\mathsf{fma}\left(4, \frac{\left(a \cdot a\right) \cdot \left(\left(b \cdot b\right) \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}\right)}{x-scale \cdot x-scale}, \mathsf{fma}\left(4, \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4} \cdot \left(\left(a \cdot a\right) \cdot \left(b \cdot b\right)\right)}{x-scale \cdot x-scale}, 8 \cdot \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2} \cdot \left(\left(a \cdot a\right) \cdot \left({\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{2} \cdot \left(b \cdot b\right)\right)\right)}{x-scale \cdot x-scale}\right)\right)}{y-scale \cdot y-scale}} \]
    4. Applied egg33.5

      \[\leadsto -\color{blue}{\frac{\frac{\mathsf{fma}\left(4, \left({\left(a \cdot b\right)}^{2} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}\right) \cdot {x-scale}^{-2}, \mathsf{fma}\left(4, \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4} \cdot {\left(a \cdot b\right)}^{2}}{x-scale \cdot x-scale}, 8 \cdot \left(\left({\left(\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right) \cdot a\right)}^{2} \cdot {\left(b \cdot \sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)}^{2}\right) \cdot {x-scale}^{-2}\right)\right)\right)}{y-scale}}{y-scale}} \]
    5. Applied egg27.1

      \[\leadsto -\frac{\frac{\mathsf{fma}\left(4, \left({\left(a \cdot b\right)}^{2} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}\right) \cdot {x-scale}^{-2}, \mathsf{fma}\left(4, \frac{{\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4} \cdot {\left(a \cdot b\right)}^{2}}{x-scale \cdot x-scale}, 8 \cdot \left(\color{blue}{{\left(\left(\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right) \cdot a\right) \cdot \left(b \cdot \sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)\right)}^{2}} \cdot {x-scale}^{-2}\right)\right)\right)}{y-scale}}{y-scale} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification25.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;y-scale \leq -2.3171389343851727 \cdot 10^{+211}:\\ \;\;\;\;0\\ \mathbf{elif}\;y-scale \leq 3.2690170656138226 \cdot 10^{+59}:\\ \;\;\;\;-\frac{\frac{\mathsf{fma}\left(4, \left({\left(a \cdot b\right)}^{2} \cdot {\sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}\right) \cdot {x-scale}^{-2}, \mathsf{fma}\left(4, \frac{{\left(a \cdot b\right)}^{2} \cdot {\cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)}^{4}}{x-scale \cdot x-scale}, 8 \cdot \left({x-scale}^{-2} \cdot {\left(\left(a \cdot \cos \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right) \cdot \left(b \cdot \sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)\right)}^{2}\right)\right)\right)}{y-scale}}{y-scale}\\ \mathbf{else}:\\ \;\;\;\;0\\ \end{array} \]

Reproduce

herbie shell --seed 2022125 
(FPCore (a b angle x-scale y-scale)
  :name "Simplification of discriminant from scale-rotated-ellipse"
  :precision binary64
  (- (* (/ (/ (* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI))) (cos (* (/ angle 180.0) PI))) x-scale) y-scale) (/ (/ (* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI))) (cos (* (/ angle 180.0) PI))) x-scale) y-scale)) (* (* 4.0 (/ (/ (+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow (* b (cos (* (/ angle 180.0) PI))) 2.0)) x-scale) x-scale)) (/ (/ (+ (pow (* a (cos (* (/ angle 180.0) PI))) 2.0) (pow (* b (sin (* (/ angle 180.0) PI))) 2.0)) y-scale) y-scale))))