(FPCore (a b angle x-scale y-scale)
:precision binary64
(*
180.0
(/
(atan
(/
(-
(-
(/
(/
(+
(pow (* a (cos (* (/ angle 180.0) PI))) 2.0)
(pow (* b (sin (* (/ angle 180.0) PI))) 2.0))
y-scale)
y-scale)
(/
(/
(+
(pow (* a (sin (* (/ angle 180.0) PI))) 2.0)
(pow (* b (cos (* (/ angle 180.0) PI))) 2.0))
x-scale)
x-scale))
(sqrt
(+
(pow
(-
(/
(/
(+
(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))
2.0)
(pow
(/
(/
(*
(*
(* 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))))
(/
(/
(*
(* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI)))
(cos (* (/ angle 180.0) PI)))
x-scale)
y-scale)))
PI)))(FPCore (a b angle x-scale y-scale)
:precision binary64
(let* ((t_0 (* angle (* PI 0.005555555555555556)))
(t_1 (* 0.005555555555555556 (* angle PI)))
(t_2
(*
180.0
(/
(atan
(*
x-scale
(/
(* y-scale (- (pow (cos t_1) 2.0)))
(* (pow x-scale 2.0) (sin t_1)))))
PI))))
(if (<= b -2.6352289852693054e+117)
(*
180.0
(/
(atan
(*
x-scale
(*
(/ (- y-scale) (* x-scale x-scale))
(/ (pow (cos t_0) 2.0) (sin t_0)))))
PI))
(if (<= b -3.1874558472003755e+23)
(*
180.0
(/
(atan
(*
(/ y-scale x-scale)
(fma
0.005555555555555556
(* angle PI)
(* (pow PI 3.0) (* -2.8577960676726107e-8 (pow angle 3.0))))))
PI))
(if (<= b -4.138763665321299e-35)
t_2
(if (<= b 8.578813038149054e-52)
(*
180.0
(/
(atan
(*
(/ y-scale x-scale)
(sin (* PI (* angle 0.005555555555555556)))))
PI))
t_2))))))double code(double a, double b, double angle, double x_45_scale, double y_45_scale) {
return 180.0 * (atan(((((((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) - (((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)) - sqrt((pow(((((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)), 2.0) + pow((((((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)))) / (((((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))) / ((double) M_PI));
}
double code(double a, double b, double angle, double x_45_scale, double y_45_scale) {
double t_0 = angle * (((double) M_PI) * 0.005555555555555556);
double t_1 = 0.005555555555555556 * (angle * ((double) M_PI));
double t_2 = 180.0 * (atan((x_45_scale * ((y_45_scale * -pow(cos(t_1), 2.0)) / (pow(x_45_scale, 2.0) * sin(t_1))))) / ((double) M_PI));
double tmp;
if (b <= -2.6352289852693054e+117) {
tmp = 180.0 * (atan((x_45_scale * ((-y_45_scale / (x_45_scale * x_45_scale)) * (pow(cos(t_0), 2.0) / sin(t_0))))) / ((double) M_PI));
} else if (b <= -3.1874558472003755e+23) {
tmp = 180.0 * (atan(((y_45_scale / x_45_scale) * fma(0.005555555555555556, (angle * ((double) M_PI)), (pow(((double) M_PI), 3.0) * (-2.8577960676726107e-8 * pow(angle, 3.0)))))) / ((double) M_PI));
} else if (b <= -4.138763665321299e-35) {
tmp = t_2;
} else if (b <= 8.578813038149054e-52) {
tmp = 180.0 * (atan(((y_45_scale / x_45_scale) * sin((((double) M_PI) * (angle * 0.005555555555555556))))) / ((double) M_PI));
} else {
tmp = t_2;
}
return tmp;
}
function code(a, b, angle, x_45_scale, y_45_scale) return Float64(180.0 * Float64(atan(Float64(Float64(Float64(Float64(Float64(Float64((Float64(a * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0)) / y_45_scale) / y_45_scale) - Float64(Float64(Float64((Float64(a * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0)) / x_45_scale) / x_45_scale)) - sqrt(Float64((Float64(Float64(Float64(Float64((Float64(a * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0)) / x_45_scale) / x_45_scale) - Float64(Float64(Float64((Float64(a * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0)) / y_45_scale) / y_45_scale)) ^ 2.0) + (Float64(Float64(Float64(Float64(Float64(2.0 * Float64((b ^ 2.0) - (a ^ 2.0))) * sin(Float64(Float64(angle / 180.0) * pi))) * cos(Float64(Float64(angle / 180.0) * pi))) / x_45_scale) / y_45_scale) ^ 2.0)))) / Float64(Float64(Float64(Float64(Float64(2.0 * Float64((b ^ 2.0) - (a ^ 2.0))) * sin(Float64(Float64(angle / 180.0) * pi))) * cos(Float64(Float64(angle / 180.0) * pi))) / x_45_scale) / y_45_scale))) / pi)) end
function code(a, b, angle, x_45_scale, y_45_scale) t_0 = Float64(angle * Float64(pi * 0.005555555555555556)) t_1 = Float64(0.005555555555555556 * Float64(angle * pi)) t_2 = Float64(180.0 * Float64(atan(Float64(x_45_scale * Float64(Float64(y_45_scale * Float64(-(cos(t_1) ^ 2.0))) / Float64((x_45_scale ^ 2.0) * sin(t_1))))) / pi)) tmp = 0.0 if (b <= -2.6352289852693054e+117) tmp = Float64(180.0 * Float64(atan(Float64(x_45_scale * Float64(Float64(Float64(-y_45_scale) / Float64(x_45_scale * x_45_scale)) * Float64((cos(t_0) ^ 2.0) / sin(t_0))))) / pi)); elseif (b <= -3.1874558472003755e+23) tmp = Float64(180.0 * Float64(atan(Float64(Float64(y_45_scale / x_45_scale) * fma(0.005555555555555556, Float64(angle * pi), Float64((pi ^ 3.0) * Float64(-2.8577960676726107e-8 * (angle ^ 3.0)))))) / pi)); elseif (b <= -4.138763665321299e-35) tmp = t_2; elseif (b <= 8.578813038149054e-52) tmp = Float64(180.0 * Float64(atan(Float64(Float64(y_45_scale / x_45_scale) * sin(Float64(pi * Float64(angle * 0.005555555555555556))))) / pi)); else tmp = t_2; end return tmp end
code[a_, b_, angle_, x$45$scale_, y$45$scale_] := N[(180.0 * N[(N[ArcTan[N[(N[(N[(N[(N[(N[(N[Power[N[(a * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / y$45$scale), $MachinePrecision] / y$45$scale), $MachinePrecision] - N[(N[(N[(N[Power[N[(a * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / x$45$scale), $MachinePrecision] / x$45$scale), $MachinePrecision]), $MachinePrecision] - N[Sqrt[N[(N[Power[N[(N[(N[(N[(N[Power[N[(a * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / x$45$scale), $MachinePrecision] / x$45$scale), $MachinePrecision] - N[(N[(N[(N[Power[N[(a * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / y$45$scale), $MachinePrecision] / y$45$scale), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(N[(N[(N[(N[(2.0 * N[(N[Power[b, 2.0], $MachinePrecision] - N[Power[a, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / x$45$scale), $MachinePrecision] / y$45$scale), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(N[(N[(2.0 * N[(N[Power[b, 2.0], $MachinePrecision] - N[Power[a, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / x$45$scale), $MachinePrecision] / y$45$scale), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]
code[a_, b_, angle_, x$45$scale_, y$45$scale_] := Block[{t$95$0 = N[(angle * N[(Pi * 0.005555555555555556), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.005555555555555556 * N[(angle * Pi), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(180.0 * N[(N[ArcTan[N[(x$45$scale * N[(N[(y$45$scale * (-N[Power[N[Cos[t$95$1], $MachinePrecision], 2.0], $MachinePrecision])), $MachinePrecision] / N[(N[Power[x$45$scale, 2.0], $MachinePrecision] * N[Sin[t$95$1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[b, -2.6352289852693054e+117], N[(180.0 * N[(N[ArcTan[N[(x$45$scale * N[(N[((-y$45$scale) / N[(x$45$scale * x$45$scale), $MachinePrecision]), $MachinePrecision] * N[(N[Power[N[Cos[t$95$0], $MachinePrecision], 2.0], $MachinePrecision] / N[Sin[t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, -3.1874558472003755e+23], N[(180.0 * N[(N[ArcTan[N[(N[(y$45$scale / x$45$scale), $MachinePrecision] * N[(0.005555555555555556 * N[(angle * Pi), $MachinePrecision] + N[(N[Power[Pi, 3.0], $MachinePrecision] * N[(-2.8577960676726107e-8 * N[Power[angle, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, -4.138763665321299e-35], t$95$2, If[LessEqual[b, 8.578813038149054e-52], N[(180.0 * N[(N[ArcTan[N[(N[(y$45$scale / x$45$scale), $MachinePrecision] * N[Sin[N[(Pi * N[(angle * 0.005555555555555556), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
180 \cdot \frac{\tan^{-1} \left(\frac{\left(\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} - \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) - \sqrt{{\left(\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} - \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}\right)}^{2} + {\left(\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}\right)}^{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}}\right)}{\pi}
\begin{array}{l}
t_0 := angle \cdot \left(\pi \cdot 0.005555555555555556\right)\\
t_1 := 0.005555555555555556 \cdot \left(angle \cdot \pi\right)\\
t_2 := 180 \cdot \frac{\tan^{-1} \left(x-scale \cdot \frac{y-scale \cdot \left(-{\cos t_1}^{2}\right)}{{x-scale}^{2} \cdot \sin t_1}\right)}{\pi}\\
\mathbf{if}\;b \leq -2.6352289852693054 \cdot 10^{+117}:\\
\;\;\;\;180 \cdot \frac{\tan^{-1} \left(x-scale \cdot \left(\frac{-y-scale}{x-scale \cdot x-scale} \cdot \frac{{\cos t_0}^{2}}{\sin t_0}\right)\right)}{\pi}\\
\mathbf{elif}\;b \leq -3.1874558472003755 \cdot 10^{+23}:\\
\;\;\;\;180 \cdot \frac{\tan^{-1} \left(\frac{y-scale}{x-scale} \cdot \mathsf{fma}\left(0.005555555555555556, angle \cdot \pi, {\pi}^{3} \cdot \left(-2.8577960676726107 \cdot 10^{-8} \cdot {angle}^{3}\right)\right)\right)}{\pi}\\
\mathbf{elif}\;b \leq -4.138763665321299 \cdot 10^{-35}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;b \leq 8.578813038149054 \cdot 10^{-52}:\\
\;\;\;\;180 \cdot \frac{\tan^{-1} \left(\frac{y-scale}{x-scale} \cdot \sin \left(\pi \cdot \left(angle \cdot 0.005555555555555556\right)\right)\right)}{\pi}\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
if b < -2.63522898526930538e117Initial program 61.6
Simplified60.9
Taylor expanded in y-scale around inf 60.2
Simplified55.5
Taylor expanded in angle around 0 55.6
Taylor expanded in b around inf 30.9
Simplified31.5
if -2.63522898526930538e117 < b < -3.1874558472003755e23Initial program 48.9
Simplified45.7
Taylor expanded in y-scale around inf 44.3
Simplified36.6
Taylor expanded in angle around 0 37.2
Taylor expanded in b around 0 40.4
Simplified39.2
Taylor expanded in angle around 0 48.7
Simplified40.4
if -3.1874558472003755e23 < b < -4.13876366532129883e-35 or 8.5788130381490539e-52 < b Initial program 54.2
Simplified52.6
Taylor expanded in y-scale around inf 50.8
Simplified46.0
Taylor expanded in angle around 0 46.1
Taylor expanded in b around inf 33.0
if -4.13876366532129883e-35 < b < 8.5788130381490539e-52Initial program 54.8
Simplified53.2
Taylor expanded in y-scale around inf 50.7
Simplified45.0
Taylor expanded in angle around 0 45.0
Taylor expanded in b around 0 31.9
Simplified31.1
Taylor expanded in x-scale around 0 27.8
Simplified26.3
Final simplification30.4
herbie shell --seed 2022204
(FPCore (a b angle x-scale y-scale)
:name "raw-angle from scale-rotated-ellipse"
:precision binary64
(* 180.0 (/ (atan (/ (- (- (/ (/ (+ (pow (* a (cos (* (/ angle 180.0) PI))) 2.0) (pow (* b (sin (* (/ angle 180.0) PI))) 2.0)) y-scale) y-scale) (/ (/ (+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow (* b (cos (* (/ angle 180.0) PI))) 2.0)) x-scale) x-scale)) (sqrt (+ (pow (- (/ (/ (+ (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)) 2.0) (pow (/ (/ (* (* (* 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)))) (/ (/ (* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (/ angle 180.0) PI))) (cos (* (/ angle 180.0) PI))) x-scale) y-scale))) PI)))