
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (* (floor h) dX.v))
(t_1 (* (floor h) dY.v))
(t_2 (* (floor w) dY.u))
(t_3 (* (floor w) dX.u))
(t_4 (fmax (+ (* t_3 t_3) (* t_0 t_0)) (+ (* t_2 t_2) (* t_1 t_1))))
(t_5 (sqrt t_4))
(t_6 (fabs (- (* t_3 t_1) (* t_0 t_2))))
(t_7 (/ t_4 t_6))
(t_8 (> t_7 (floor maxAniso)))
(t_9 (if t_8 (/ t_5 (floor maxAniso)) (/ t_6 t_5)))
(t_10 (if t_8 (floor maxAniso) t_7)))
(if (< t_9 1.0) (fmax 1.0 (* t_10 t_9)) t_10)))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = floorf(h) * dX_46_v;
float t_1 = floorf(h) * dY_46_v;
float t_2 = floorf(w) * dY_46_u;
float t_3 = floorf(w) * dX_46_u;
float t_4 = fmaxf(((t_3 * t_3) + (t_0 * t_0)), ((t_2 * t_2) + (t_1 * t_1)));
float t_5 = sqrtf(t_4);
float t_6 = fabsf(((t_3 * t_1) - (t_0 * t_2)));
float t_7 = t_4 / t_6;
int t_8 = t_7 > floorf(maxAniso);
float tmp;
if (t_8) {
tmp = t_5 / floorf(maxAniso);
} else {
tmp = t_6 / t_5;
}
float t_9 = tmp;
float tmp_1;
if (t_8) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_7;
}
float t_10 = tmp_1;
float tmp_2;
if (t_9 < 1.0f) {
tmp_2 = fmaxf(1.0f, (t_10 * t_9));
} else {
tmp_2 = t_10;
}
return tmp_2;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(floor(h) * dX_46_v) t_1 = Float32(floor(h) * dY_46_v) t_2 = Float32(floor(w) * dY_46_u) t_3 = Float32(floor(w) * dX_46_u) t_4 = fmax(Float32(Float32(t_3 * t_3) + Float32(t_0 * t_0)), Float32(Float32(t_2 * t_2) + Float32(t_1 * t_1))) t_5 = sqrt(t_4) t_6 = abs(Float32(Float32(t_3 * t_1) - Float32(t_0 * t_2))) t_7 = Float32(t_4 / t_6) t_8 = t_7 > floor(maxAniso) tmp = Float32(0.0) if (t_8) tmp = Float32(t_5 / floor(maxAniso)); else tmp = Float32(t_6 / t_5); end t_9 = tmp tmp_1 = Float32(0.0) if (t_8) tmp_1 = floor(maxAniso); else tmp_1 = t_7; end t_10 = tmp_1 tmp_2 = Float32(0.0) if (t_9 < Float32(1.0)) tmp_2 = fmax(Float32(1.0), Float32(t_10 * t_9)); else tmp_2 = t_10; end return tmp_2 end
function tmp_4 = code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(h) * dX_46_v; t_1 = floor(h) * dY_46_v; t_2 = floor(w) * dY_46_u; t_3 = floor(w) * dX_46_u; t_4 = max(((t_3 * t_3) + (t_0 * t_0)), ((t_2 * t_2) + (t_1 * t_1))); t_5 = sqrt(t_4); t_6 = abs(((t_3 * t_1) - (t_0 * t_2))); t_7 = t_4 / t_6; t_8 = t_7 > floor(maxAniso); tmp = single(0.0); if (t_8) tmp = t_5 / floor(maxAniso); else tmp = t_6 / t_5; end t_9 = tmp; tmp_2 = single(0.0); if (t_8) tmp_2 = floor(maxAniso); else tmp_2 = t_7; end t_10 = tmp_2; tmp_3 = single(0.0); if (t_9 < single(1.0)) tmp_3 = max(single(1.0), (t_10 * t_9)); else tmp_3 = t_10; end tmp_4 = tmp_3; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_1 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_2 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_3 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_4 := \mathsf{max}\left(t\_3 \cdot t\_3 + t\_0 \cdot t\_0, t\_2 \cdot t\_2 + t\_1 \cdot t\_1\right)\\
t_5 := \sqrt{t\_4}\\
t_6 := \left|t\_3 \cdot t\_1 - t\_0 \cdot t\_2\right|\\
t_7 := \frac{t\_4}{t\_6}\\
t_8 := t\_7 > \left\lfloor maxAniso\right\rfloor \\
t_9 := \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\frac{t\_5}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_6}{t\_5}\\
\end{array}\\
t_10 := \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}\\
\mathbf{if}\;t\_9 < 1:\\
\;\;\;\;\mathsf{max}\left(1, t\_10 \cdot t\_9\right)\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array}
\end{array}
Sampling outcomes in binary32 precision:
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (* (floor h) dX.v))
(t_1 (* (floor h) dY.v))
(t_2 (* (floor w) dY.u))
(t_3 (* (floor w) dX.u))
(t_4 (fmax (+ (* t_3 t_3) (* t_0 t_0)) (+ (* t_2 t_2) (* t_1 t_1))))
(t_5 (sqrt t_4))
(t_6 (fabs (- (* t_3 t_1) (* t_0 t_2))))
(t_7 (/ t_4 t_6))
(t_8 (> t_7 (floor maxAniso)))
(t_9 (if t_8 (/ t_5 (floor maxAniso)) (/ t_6 t_5)))
(t_10 (if t_8 (floor maxAniso) t_7)))
(if (< t_9 1.0) (fmax 1.0 (* t_10 t_9)) t_10)))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = floorf(h) * dX_46_v;
float t_1 = floorf(h) * dY_46_v;
float t_2 = floorf(w) * dY_46_u;
float t_3 = floorf(w) * dX_46_u;
float t_4 = fmaxf(((t_3 * t_3) + (t_0 * t_0)), ((t_2 * t_2) + (t_1 * t_1)));
float t_5 = sqrtf(t_4);
float t_6 = fabsf(((t_3 * t_1) - (t_0 * t_2)));
float t_7 = t_4 / t_6;
int t_8 = t_7 > floorf(maxAniso);
float tmp;
if (t_8) {
tmp = t_5 / floorf(maxAniso);
} else {
tmp = t_6 / t_5;
}
float t_9 = tmp;
float tmp_1;
if (t_8) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_7;
}
float t_10 = tmp_1;
float tmp_2;
if (t_9 < 1.0f) {
tmp_2 = fmaxf(1.0f, (t_10 * t_9));
} else {
tmp_2 = t_10;
}
return tmp_2;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(floor(h) * dX_46_v) t_1 = Float32(floor(h) * dY_46_v) t_2 = Float32(floor(w) * dY_46_u) t_3 = Float32(floor(w) * dX_46_u) t_4 = fmax(Float32(Float32(t_3 * t_3) + Float32(t_0 * t_0)), Float32(Float32(t_2 * t_2) + Float32(t_1 * t_1))) t_5 = sqrt(t_4) t_6 = abs(Float32(Float32(t_3 * t_1) - Float32(t_0 * t_2))) t_7 = Float32(t_4 / t_6) t_8 = t_7 > floor(maxAniso) tmp = Float32(0.0) if (t_8) tmp = Float32(t_5 / floor(maxAniso)); else tmp = Float32(t_6 / t_5); end t_9 = tmp tmp_1 = Float32(0.0) if (t_8) tmp_1 = floor(maxAniso); else tmp_1 = t_7; end t_10 = tmp_1 tmp_2 = Float32(0.0) if (t_9 < Float32(1.0)) tmp_2 = fmax(Float32(1.0), Float32(t_10 * t_9)); else tmp_2 = t_10; end return tmp_2 end
function tmp_4 = code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(h) * dX_46_v; t_1 = floor(h) * dY_46_v; t_2 = floor(w) * dY_46_u; t_3 = floor(w) * dX_46_u; t_4 = max(((t_3 * t_3) + (t_0 * t_0)), ((t_2 * t_2) + (t_1 * t_1))); t_5 = sqrt(t_4); t_6 = abs(((t_3 * t_1) - (t_0 * t_2))); t_7 = t_4 / t_6; t_8 = t_7 > floor(maxAniso); tmp = single(0.0); if (t_8) tmp = t_5 / floor(maxAniso); else tmp = t_6 / t_5; end t_9 = tmp; tmp_2 = single(0.0); if (t_8) tmp_2 = floor(maxAniso); else tmp_2 = t_7; end t_10 = tmp_2; tmp_3 = single(0.0); if (t_9 < single(1.0)) tmp_3 = max(single(1.0), (t_10 * t_9)); else tmp_3 = t_10; end tmp_4 = tmp_3; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_1 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_2 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_3 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_4 := \mathsf{max}\left(t\_3 \cdot t\_3 + t\_0 \cdot t\_0, t\_2 \cdot t\_2 + t\_1 \cdot t\_1\right)\\
t_5 := \sqrt{t\_4}\\
t_6 := \left|t\_3 \cdot t\_1 - t\_0 \cdot t\_2\right|\\
t_7 := \frac{t\_4}{t\_6}\\
t_8 := t\_7 > \left\lfloor maxAniso\right\rfloor \\
t_9 := \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\frac{t\_5}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_6}{t\_5}\\
\end{array}\\
t_10 := \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}\\
\mathbf{if}\;t\_9 < 1:\\
\;\;\;\;\mathsf{max}\left(1, t\_10 \cdot t\_9\right)\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array}
\end{array}
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (* dX.u (floor w)))
(t_1 (* (floor h) dX.v))
(t_2 (* (floor w) dX.u))
(t_3 (pow (floor w) 2.0))
(t_4 (* t_3 dY.u))
(t_5 (pow (* dX.v (floor h)) 2.0))
(t_6 (* (floor w) (floor h)))
(t_7 (pow (floor h) 2.0))
(t_8 (fma t_4 dY.u (* (* t_7 dY.v) dY.v)))
(t_9 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_10 (fabs (* t_9 t_6)))
(t_11 (* (floor w) dY.u))
(t_12 (* (floor h) dY.v))
(t_13
(fmax (+ (* t_2 t_2) (* t_1 t_1)) (+ (* t_11 t_11) (* t_12 t_12))))
(t_14 (fabs (- (* t_1 t_11) (* t_2 t_12))))
(t_15 (sqrt t_13))
(t_16 (/ t_13 t_14))
(t_17 (> t_16 (floor maxAniso)))
(t_18 (if t_17 (/ t_15 (floor maxAniso)) (/ t_14 t_15)))
(t_19 (< t_18 1.0))
(t_20 (if t_17 (floor maxAniso) t_16))
(t_21 (fmax 1.0 (* t_20 t_18)))
(t_22 (fma (* t_3 dX.u) dX.u (* (* t_7 dX.v) dX.v)))
(t_23 (fmax t_22 t_8))
(t_24 (/ t_23 t_10))
(t_25 (* (sqrt (/ 1.0 t_23)) t_10))
(t_26 (> t_24 (floor maxAniso))))
(if (<= (if t_19 t_21 t_20) 20.0)
(if t_19
t_21
(if t_17
(floor maxAniso)
(/ t_13 (fabs (* (* t_6 (- (/ (* dY.v dX.u) dY.u) dX.v)) dY.u)))))
(if (<
(if (> (/ (fmax t_22 (* t_4 dY.u)) t_10) (floor maxAniso))
(/ (sqrt (fmax (+ t_5 (* t_0 t_0)) t_8)) (floor maxAniso))
t_25)
1.0)
(fmax
1.0
(*
(if t_26 (floor maxAniso) t_24)
(if t_26 (/ (sqrt t_23) (floor maxAniso)) t_25)))
(if (>
(/
(/
(fmax
(+ t_5 (pow t_0 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs t_9))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_24)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = dX_46_u * floorf(w);
float t_1 = floorf(h) * dX_46_v;
float t_2 = floorf(w) * dX_46_u;
float t_3 = powf(floorf(w), 2.0f);
float t_4 = t_3 * dY_46_u;
float t_5 = powf((dX_46_v * floorf(h)), 2.0f);
float t_6 = floorf(w) * floorf(h);
float t_7 = powf(floorf(h), 2.0f);
float t_8 = fmaf(t_4, dY_46_u, ((t_7 * dY_46_v) * dY_46_v));
float t_9 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_10 = fabsf((t_9 * t_6));
float t_11 = floorf(w) * dY_46_u;
float t_12 = floorf(h) * dY_46_v;
float t_13 = fmaxf(((t_2 * t_2) + (t_1 * t_1)), ((t_11 * t_11) + (t_12 * t_12)));
float t_14 = fabsf(((t_1 * t_11) - (t_2 * t_12)));
float t_15 = sqrtf(t_13);
float t_16 = t_13 / t_14;
int t_17 = t_16 > floorf(maxAniso);
float tmp;
if (t_17) {
tmp = t_15 / floorf(maxAniso);
} else {
tmp = t_14 / t_15;
}
float t_18 = tmp;
int t_19 = t_18 < 1.0f;
float tmp_1;
if (t_17) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_16;
}
float t_20 = tmp_1;
float t_21 = fmaxf(1.0f, (t_20 * t_18));
float t_22 = fmaf((t_3 * dX_46_u), dX_46_u, ((t_7 * dX_46_v) * dX_46_v));
float t_23 = fmaxf(t_22, t_8);
float t_24 = t_23 / t_10;
float t_25 = sqrtf((1.0f / t_23)) * t_10;
int t_26 = t_24 > floorf(maxAniso);
float tmp_2;
if (t_19) {
tmp_2 = t_21;
} else {
tmp_2 = t_20;
}
float tmp_3;
if ((fmaxf(t_22, (t_4 * dY_46_u)) / t_10) > floorf(maxAniso)) {
tmp_3 = sqrtf(fmaxf((t_5 + (t_0 * t_0)), t_8)) / floorf(maxAniso);
} else {
tmp_3 = t_25;
}
float tmp_5;
if (tmp_2 <= 20.0f) {
float tmp_6;
if (t_19) {
tmp_6 = t_21;
} else if (t_17) {
tmp_6 = floorf(maxAniso);
} else {
tmp_6 = t_13 / fabsf(((t_6 * (((dY_46_v * dX_46_u) / dY_46_u) - dX_46_v)) * dY_46_u));
}
tmp_5 = tmp_6;
} else if (tmp_3 < 1.0f) {
float tmp_7;
if (t_26) {
tmp_7 = floorf(maxAniso);
} else {
tmp_7 = t_24;
}
float tmp_8;
if (t_26) {
tmp_8 = sqrtf(t_23) / floorf(maxAniso);
} else {
tmp_8 = t_25;
}
tmp_5 = fmaxf(1.0f, (tmp_7 * tmp_8));
} else if (((fmaxf((t_5 + powf(t_0, 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(t_9)) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_5 = floorf(maxAniso);
} else {
tmp_5 = t_24;
}
return tmp_5;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dX_46_u * floor(w)) t_1 = Float32(floor(h) * dX_46_v) t_2 = Float32(floor(w) * dX_46_u) t_3 = floor(w) ^ Float32(2.0) t_4 = Float32(t_3 * dY_46_u) t_5 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_6 = Float32(floor(w) * floor(h)) t_7 = floor(h) ^ Float32(2.0) t_8 = fma(t_4, dY_46_u, Float32(Float32(t_7 * dY_46_v) * dY_46_v)) t_9 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_10 = abs(Float32(t_9 * t_6)) t_11 = Float32(floor(w) * dY_46_u) t_12 = Float32(floor(h) * dY_46_v) t_13 = fmax(Float32(Float32(t_2 * t_2) + Float32(t_1 * t_1)), Float32(Float32(t_11 * t_11) + Float32(t_12 * t_12))) t_14 = abs(Float32(Float32(t_1 * t_11) - Float32(t_2 * t_12))) t_15 = sqrt(t_13) t_16 = Float32(t_13 / t_14) t_17 = t_16 > floor(maxAniso) tmp = Float32(0.0) if (t_17) tmp = Float32(t_15 / floor(maxAniso)); else tmp = Float32(t_14 / t_15); end t_18 = tmp t_19 = t_18 < Float32(1.0) tmp_1 = Float32(0.0) if (t_17) tmp_1 = floor(maxAniso); else tmp_1 = t_16; end t_20 = tmp_1 t_21 = fmax(Float32(1.0), Float32(t_20 * t_18)) t_22 = fma(Float32(t_3 * dX_46_u), dX_46_u, Float32(Float32(t_7 * dX_46_v) * dX_46_v)) t_23 = fmax(t_22, t_8) t_24 = Float32(t_23 / t_10) t_25 = Float32(sqrt(Float32(Float32(1.0) / t_23)) * t_10) t_26 = t_24 > floor(maxAniso) tmp_2 = Float32(0.0) if (t_19) tmp_2 = t_21; else tmp_2 = t_20; end tmp_3 = Float32(0.0) if (Float32(fmax(t_22, Float32(t_4 * dY_46_u)) / t_10) > floor(maxAniso)) tmp_3 = Float32(sqrt(fmax(Float32(t_5 + Float32(t_0 * t_0)), t_8)) / floor(maxAniso)); else tmp_3 = t_25; end tmp_5 = Float32(0.0) if (tmp_2 <= Float32(20.0)) tmp_6 = Float32(0.0) if (t_19) tmp_6 = t_21; elseif (t_17) tmp_6 = floor(maxAniso); else tmp_6 = Float32(t_13 / abs(Float32(Float32(t_6 * Float32(Float32(Float32(dY_46_v * dX_46_u) / dY_46_u) - dX_46_v)) * dY_46_u))); end tmp_5 = tmp_6; elseif (tmp_3 < Float32(1.0)) tmp_7 = Float32(0.0) if (t_26) tmp_7 = floor(maxAniso); else tmp_7 = t_24; end tmp_8 = Float32(0.0) if (t_26) tmp_8 = Float32(sqrt(t_23) / floor(maxAniso)); else tmp_8 = t_25; end tmp_5 = fmax(Float32(1.0), Float32(tmp_7 * tmp_8)); elseif (Float32(Float32(fmax(Float32(t_5 + (t_0 ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(t_9)) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_5 = floor(maxAniso); else tmp_5 = t_24; end return tmp_5 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_1 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_2 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_3 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_4 := t\_3 \cdot dY.u\\
t_5 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_6 := \left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \\
t_7 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_8 := \mathsf{fma}\left(t\_4, dY.u, \left(t\_7 \cdot dY.v\right) \cdot dY.v\right)\\
t_9 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_10 := \left|t\_9 \cdot t\_6\right|\\
t_11 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_12 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_13 := \mathsf{max}\left(t\_2 \cdot t\_2 + t\_1 \cdot t\_1, t\_11 \cdot t\_11 + t\_12 \cdot t\_12\right)\\
t_14 := \left|t\_1 \cdot t\_11 - t\_2 \cdot t\_12\right|\\
t_15 := \sqrt{t\_13}\\
t_16 := \frac{t\_13}{t\_14}\\
t_17 := t\_16 > \left\lfloor maxAniso\right\rfloor \\
t_18 := \begin{array}{l}
\mathbf{if}\;t\_17:\\
\;\;\;\;\frac{t\_15}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_14}{t\_15}\\
\end{array}\\
t_19 := t\_18 < 1\\
t_20 := \begin{array}{l}
\mathbf{if}\;t\_17:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_16\\
\end{array}\\
t_21 := \mathsf{max}\left(1, t\_20 \cdot t\_18\right)\\
t_22 := \mathsf{fma}\left(t\_3 \cdot dX.u, dX.u, \left(t\_7 \cdot dX.v\right) \cdot dX.v\right)\\
t_23 := \mathsf{max}\left(t\_22, t\_8\right)\\
t_24 := \frac{t\_23}{t\_10}\\
t_25 := \sqrt{\frac{1}{t\_23}} \cdot t\_10\\
t_26 := t\_24 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;t\_19:\\
\;\;\;\;t\_21\\
\mathbf{else}:\\
\;\;\;\;t\_20\\
\end{array} \leq 20:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;t\_19:\\
\;\;\;\;t\_21\\
\mathbf{elif}\;t\_17:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;\frac{t\_13}{\left|\left(t\_6 \cdot \left(\frac{dY.v \cdot dX.u}{dY.u} - dX.v\right)\right) \cdot dY.u\right|}\\
\end{array}\\
\mathbf{elif}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_22, t\_4 \cdot dY.u\right)}{t\_10} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\frac{\sqrt{\mathsf{max}\left(t\_5 + t\_0 \cdot t\_0, t\_8\right)}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_26:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_24\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_26:\\
\;\;\;\;\frac{\sqrt{t\_23}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left(t\_5 + {t\_0}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|t\_9\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_24\\
\end{array}
\end{array}
if (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) < 20Initial program 99.6%
Taylor expanded in dY.u around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites99.7%
if 20 < (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) Initial program -0.0%
Taylor expanded in w around 0
Applied rewrites48.9%
Taylor expanded in dY.u around inf
Applied rewrites53.9%
Applied rewrites60.3%
Applied rewrites83.3%
Final simplification98.5%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (* dX.v (floor h)) 2.0))
(t_1 (fabs (* (* (floor w) dY.v) (* (floor h) dX.u))))
(t_2 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_3 (* (floor w) dX.u))
(t_4 (pow (floor w) 2.0))
(t_5 (pow (floor h) 2.0))
(t_6 (* dX.u (floor w)))
(t_7 (* (floor h) dX.v))
(t_8 (* t_4 dY.u))
(t_9 (fma t_8 dY.u (* (* t_5 dY.v) dY.v)))
(t_10 (fabs (* t_2 (* (floor w) (floor h)))))
(t_11 (* (floor w) dY.u))
(t_12 (* (floor h) dY.v))
(t_13
(fmax (+ (* t_3 t_3) (* t_7 t_7)) (+ (* t_11 t_11) (* t_12 t_12))))
(t_14 (fabs (- (* t_7 t_11) (* t_3 t_12))))
(t_15 (sqrt t_13))
(t_16 (/ t_15 (floor maxAniso)))
(t_17 (/ t_13 t_14))
(t_18 (> t_17 (floor maxAniso)))
(t_19 (if t_18 t_16 (/ t_14 t_15)))
(t_20 (if t_18 (floor maxAniso) t_17))
(t_21 (fmax 1.0 (* t_20 t_19)))
(t_22 (fma (* t_4 dX.u) dX.u (* (* t_5 dX.v) dX.v)))
(t_23 (fmax t_22 t_9))
(t_24 (* (sqrt (/ 1.0 t_23)) t_10))
(t_25 (/ t_23 t_10))
(t_26 (> t_25 (floor maxAniso))))
(if (<= (if (< t_19 1.0) t_21 t_20) 20.0)
(if (< (if (> (/ t_13 t_1) (floor maxAniso)) t_16 (/ t_1 t_15)) 1.0)
t_21
t_20)
(if (<
(if (> (/ (fmax t_22 (* t_8 dY.u)) t_10) (floor maxAniso))
(/ (sqrt (fmax (+ t_0 (* t_6 t_6)) t_9)) (floor maxAniso))
t_24)
1.0)
(fmax
1.0
(*
(if t_26 (floor maxAniso) t_25)
(if t_26 (/ (sqrt t_23) (floor maxAniso)) t_24)))
(if (>
(/
(/
(fmax
(+ t_0 (pow t_6 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs t_2))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_25)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf((dX_46_v * floorf(h)), 2.0f);
float t_1 = fabsf(((floorf(w) * dY_46_v) * (floorf(h) * dX_46_u)));
float t_2 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_3 = floorf(w) * dX_46_u;
float t_4 = powf(floorf(w), 2.0f);
float t_5 = powf(floorf(h), 2.0f);
float t_6 = dX_46_u * floorf(w);
float t_7 = floorf(h) * dX_46_v;
float t_8 = t_4 * dY_46_u;
float t_9 = fmaf(t_8, dY_46_u, ((t_5 * dY_46_v) * dY_46_v));
float t_10 = fabsf((t_2 * (floorf(w) * floorf(h))));
float t_11 = floorf(w) * dY_46_u;
float t_12 = floorf(h) * dY_46_v;
float t_13 = fmaxf(((t_3 * t_3) + (t_7 * t_7)), ((t_11 * t_11) + (t_12 * t_12)));
float t_14 = fabsf(((t_7 * t_11) - (t_3 * t_12)));
float t_15 = sqrtf(t_13);
float t_16 = t_15 / floorf(maxAniso);
float t_17 = t_13 / t_14;
int t_18 = t_17 > floorf(maxAniso);
float tmp;
if (t_18) {
tmp = t_16;
} else {
tmp = t_14 / t_15;
}
float t_19 = tmp;
float tmp_1;
if (t_18) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_17;
}
float t_20 = tmp_1;
float t_21 = fmaxf(1.0f, (t_20 * t_19));
float t_22 = fmaf((t_4 * dX_46_u), dX_46_u, ((t_5 * dX_46_v) * dX_46_v));
float t_23 = fmaxf(t_22, t_9);
float t_24 = sqrtf((1.0f / t_23)) * t_10;
float t_25 = t_23 / t_10;
int t_26 = t_25 > floorf(maxAniso);
float tmp_2;
if (t_19 < 1.0f) {
tmp_2 = t_21;
} else {
tmp_2 = t_20;
}
float tmp_3;
if ((fmaxf(t_22, (t_8 * dY_46_u)) / t_10) > floorf(maxAniso)) {
tmp_3 = sqrtf(fmaxf((t_0 + (t_6 * t_6)), t_9)) / floorf(maxAniso);
} else {
tmp_3 = t_24;
}
float tmp_6;
if (tmp_2 <= 20.0f) {
float tmp_7;
if ((t_13 / t_1) > floorf(maxAniso)) {
tmp_7 = t_16;
} else {
tmp_7 = t_1 / t_15;
}
float tmp_8;
if (tmp_7 < 1.0f) {
tmp_8 = t_21;
} else {
tmp_8 = t_20;
}
tmp_6 = tmp_8;
} else if (tmp_3 < 1.0f) {
float tmp_9;
if (t_26) {
tmp_9 = floorf(maxAniso);
} else {
tmp_9 = t_25;
}
float tmp_10;
if (t_26) {
tmp_10 = sqrtf(t_23) / floorf(maxAniso);
} else {
tmp_10 = t_24;
}
tmp_6 = fmaxf(1.0f, (tmp_9 * tmp_10));
} else if (((fmaxf((t_0 + powf(t_6, 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(t_2)) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_6 = floorf(maxAniso);
} else {
tmp_6 = t_25;
}
return tmp_6;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_1 = abs(Float32(Float32(floor(w) * dY_46_v) * Float32(floor(h) * dX_46_u))) t_2 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_3 = Float32(floor(w) * dX_46_u) t_4 = floor(w) ^ Float32(2.0) t_5 = floor(h) ^ Float32(2.0) t_6 = Float32(dX_46_u * floor(w)) t_7 = Float32(floor(h) * dX_46_v) t_8 = Float32(t_4 * dY_46_u) t_9 = fma(t_8, dY_46_u, Float32(Float32(t_5 * dY_46_v) * dY_46_v)) t_10 = abs(Float32(t_2 * Float32(floor(w) * floor(h)))) t_11 = Float32(floor(w) * dY_46_u) t_12 = Float32(floor(h) * dY_46_v) t_13 = fmax(Float32(Float32(t_3 * t_3) + Float32(t_7 * t_7)), Float32(Float32(t_11 * t_11) + Float32(t_12 * t_12))) t_14 = abs(Float32(Float32(t_7 * t_11) - Float32(t_3 * t_12))) t_15 = sqrt(t_13) t_16 = Float32(t_15 / floor(maxAniso)) t_17 = Float32(t_13 / t_14) t_18 = t_17 > floor(maxAniso) tmp = Float32(0.0) if (t_18) tmp = t_16; else tmp = Float32(t_14 / t_15); end t_19 = tmp tmp_1 = Float32(0.0) if (t_18) tmp_1 = floor(maxAniso); else tmp_1 = t_17; end t_20 = tmp_1 t_21 = fmax(Float32(1.0), Float32(t_20 * t_19)) t_22 = fma(Float32(t_4 * dX_46_u), dX_46_u, Float32(Float32(t_5 * dX_46_v) * dX_46_v)) t_23 = fmax(t_22, t_9) t_24 = Float32(sqrt(Float32(Float32(1.0) / t_23)) * t_10) t_25 = Float32(t_23 / t_10) t_26 = t_25 > floor(maxAniso) tmp_2 = Float32(0.0) if (t_19 < Float32(1.0)) tmp_2 = t_21; else tmp_2 = t_20; end tmp_3 = Float32(0.0) if (Float32(fmax(t_22, Float32(t_8 * dY_46_u)) / t_10) > floor(maxAniso)) tmp_3 = Float32(sqrt(fmax(Float32(t_0 + Float32(t_6 * t_6)), t_9)) / floor(maxAniso)); else tmp_3 = t_24; end tmp_6 = Float32(0.0) if (tmp_2 <= Float32(20.0)) tmp_7 = Float32(0.0) if (Float32(t_13 / t_1) > floor(maxAniso)) tmp_7 = t_16; else tmp_7 = Float32(t_1 / t_15); end tmp_8 = Float32(0.0) if (tmp_7 < Float32(1.0)) tmp_8 = t_21; else tmp_8 = t_20; end tmp_6 = tmp_8; elseif (tmp_3 < Float32(1.0)) tmp_9 = Float32(0.0) if (t_26) tmp_9 = floor(maxAniso); else tmp_9 = t_25; end tmp_10 = Float32(0.0) if (t_26) tmp_10 = Float32(sqrt(t_23) / floor(maxAniso)); else tmp_10 = t_24; end tmp_6 = fmax(Float32(1.0), Float32(tmp_9 * tmp_10)); elseif (Float32(Float32(fmax(Float32(t_0 + (t_6 ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(t_2)) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_6 = floor(maxAniso); else tmp_6 = t_25; end return tmp_6 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := \left|\left(\left\lfloor w\right\rfloor \cdot dY.v\right) \cdot \left(\left\lfloor h\right\rfloor \cdot dX.u\right)\right|\\
t_2 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_3 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_4 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_5 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_6 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_7 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_8 := t\_4 \cdot dY.u\\
t_9 := \mathsf{fma}\left(t\_8, dY.u, \left(t\_5 \cdot dY.v\right) \cdot dY.v\right)\\
t_10 := \left|t\_2 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_11 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_12 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_13 := \mathsf{max}\left(t\_3 \cdot t\_3 + t\_7 \cdot t\_7, t\_11 \cdot t\_11 + t\_12 \cdot t\_12\right)\\
t_14 := \left|t\_7 \cdot t\_11 - t\_3 \cdot t\_12\right|\\
t_15 := \sqrt{t\_13}\\
t_16 := \frac{t\_15}{\left\lfloor maxAniso\right\rfloor }\\
t_17 := \frac{t\_13}{t\_14}\\
t_18 := t\_17 > \left\lfloor maxAniso\right\rfloor \\
t_19 := \begin{array}{l}
\mathbf{if}\;t\_18:\\
\;\;\;\;t\_16\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_14}{t\_15}\\
\end{array}\\
t_20 := \begin{array}{l}
\mathbf{if}\;t\_18:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_17\\
\end{array}\\
t_21 := \mathsf{max}\left(1, t\_20 \cdot t\_19\right)\\
t_22 := \mathsf{fma}\left(t\_4 \cdot dX.u, dX.u, \left(t\_5 \cdot dX.v\right) \cdot dX.v\right)\\
t_23 := \mathsf{max}\left(t\_22, t\_9\right)\\
t_24 := \sqrt{\frac{1}{t\_23}} \cdot t\_10\\
t_25 := \frac{t\_23}{t\_10}\\
t_26 := t\_25 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;t\_19 < 1:\\
\;\;\;\;t\_21\\
\mathbf{else}:\\
\;\;\;\;t\_20\\
\end{array} \leq 20:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{t\_13}{t\_1} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_16\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_1}{t\_15}\\
\end{array} < 1:\\
\;\;\;\;t\_21\\
\mathbf{else}:\\
\;\;\;\;t\_20\\
\end{array}\\
\mathbf{elif}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_22, t\_8 \cdot dY.u\right)}{t\_10} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\frac{\sqrt{\mathsf{max}\left(t\_0 + t\_6 \cdot t\_6, t\_9\right)}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_24\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_26:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_26:\\
\;\;\;\;\frac{\sqrt{t\_23}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_24\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left(t\_0 + {t\_6}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|t\_2\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array}
\end{array}
if (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) < 20Initial program 99.6%
Taylor expanded in dX.u around inf
*-commutativeN/A
associate-*r*N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower-floor.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-floor.f3298.9
Applied rewrites98.9%
Taylor expanded in dX.u around inf
*-commutativeN/A
associate-*r*N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower-floor.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-floor.f3299.6
Applied rewrites99.6%
if 20 < (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) Initial program -0.0%
Taylor expanded in w around 0
Applied rewrites40.7%
Taylor expanded in dY.u around inf
Applied rewrites53.9%
Applied rewrites60.3%
Applied rewrites83.3%
Final simplification98.5%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (* dX.v (floor h)) 2.0))
(t_1 (* (floor w) dY.v))
(t_2 (* (floor h) dY.v))
(t_3 (* (floor w) dX.u))
(t_4 (pow (floor w) 2.0))
(t_5 (* (floor h) dX.v))
(t_6 (* (floor h) (floor w)))
(t_7 (pow (floor h) 2.0))
(t_8 (fma (* t_4 dX.u) dX.u (* (* t_7 dX.v) dX.v)))
(t_9 (* dX.u (floor w)))
(t_10 (* t_4 dY.u))
(t_11 (fma t_10 dY.u (* (* t_7 dY.v) dY.v)))
(t_12 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_13 (fabs (* t_12 (* (floor w) (floor h)))))
(t_14 (* (floor w) dY.u))
(t_15 (fmax (+ (* t_3 t_3) (* t_5 t_5)) (+ (* t_14 t_14) (* t_2 t_2))))
(t_16 (fabs (- (* t_5 t_14) (* t_3 t_2))))
(t_17 (sqrt t_15))
(t_18 (/ t_17 (floor maxAniso)))
(t_19 (fabs (* (* dX.u t_2) (floor w))))
(t_20 (/ t_15 t_16))
(t_21 (> t_20 (floor maxAniso)))
(t_22 (if t_21 t_18 (/ t_16 t_17)))
(t_23 (if t_21 (floor maxAniso) t_20))
(t_24 (fmax t_8 t_11))
(t_25 (* (sqrt (/ 1.0 t_24)) t_13))
(t_26 (/ t_24 t_13))
(t_27 (> t_26 (floor maxAniso))))
(if (<= (if (< t_22 1.0) (fmax 1.0 (* t_23 t_22)) t_23) 20.0)
(if (< (if t_21 t_18 (/ (fabs (* t_1 (* (floor h) dX.u))) t_17)) 1.0)
(fmax
1.0
(* t_23 (if (> (/ t_15 t_19) (floor maxAniso)) t_18 (/ t_19 t_17))))
(if t_21
(floor maxAniso)
(/
t_15
(fabs
(* (fma (- dY.u) t_6 (* (/ dX.u dX.v) (* t_1 (floor h)))) dX.v)))))
(if (<
(if (> (/ (fmax t_8 (* t_10 dY.u)) t_13) (floor maxAniso))
(/ (sqrt (fmax (+ t_0 (* t_9 t_9)) t_11)) (floor maxAniso))
t_25)
1.0)
(fmax
1.0
(*
(if t_27 (floor maxAniso) t_26)
(if t_27 (/ (sqrt t_24) (floor maxAniso)) t_25)))
(if (>
(/
(/
(fmax
(+ t_0 (pow t_9 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs t_12))
t_6)
(floor maxAniso))
(floor maxAniso)
t_26)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf((dX_46_v * floorf(h)), 2.0f);
float t_1 = floorf(w) * dY_46_v;
float t_2 = floorf(h) * dY_46_v;
float t_3 = floorf(w) * dX_46_u;
float t_4 = powf(floorf(w), 2.0f);
float t_5 = floorf(h) * dX_46_v;
float t_6 = floorf(h) * floorf(w);
float t_7 = powf(floorf(h), 2.0f);
float t_8 = fmaf((t_4 * dX_46_u), dX_46_u, ((t_7 * dX_46_v) * dX_46_v));
float t_9 = dX_46_u * floorf(w);
float t_10 = t_4 * dY_46_u;
float t_11 = fmaf(t_10, dY_46_u, ((t_7 * dY_46_v) * dY_46_v));
float t_12 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_13 = fabsf((t_12 * (floorf(w) * floorf(h))));
float t_14 = floorf(w) * dY_46_u;
float t_15 = fmaxf(((t_3 * t_3) + (t_5 * t_5)), ((t_14 * t_14) + (t_2 * t_2)));
float t_16 = fabsf(((t_5 * t_14) - (t_3 * t_2)));
float t_17 = sqrtf(t_15);
float t_18 = t_17 / floorf(maxAniso);
float t_19 = fabsf(((dX_46_u * t_2) * floorf(w)));
float t_20 = t_15 / t_16;
int t_21 = t_20 > floorf(maxAniso);
float tmp;
if (t_21) {
tmp = t_18;
} else {
tmp = t_16 / t_17;
}
float t_22 = tmp;
float tmp_1;
if (t_21) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_20;
}
float t_23 = tmp_1;
float t_24 = fmaxf(t_8, t_11);
float t_25 = sqrtf((1.0f / t_24)) * t_13;
float t_26 = t_24 / t_13;
int t_27 = t_26 > floorf(maxAniso);
float tmp_2;
if (t_22 < 1.0f) {
tmp_2 = fmaxf(1.0f, (t_23 * t_22));
} else {
tmp_2 = t_23;
}
float tmp_3;
if ((fmaxf(t_8, (t_10 * dY_46_u)) / t_13) > floorf(maxAniso)) {
tmp_3 = sqrtf(fmaxf((t_0 + (t_9 * t_9)), t_11)) / floorf(maxAniso);
} else {
tmp_3 = t_25;
}
float tmp_8;
if (tmp_2 <= 20.0f) {
float tmp_9;
if (t_21) {
tmp_9 = t_18;
} else {
tmp_9 = fabsf((t_1 * (floorf(h) * dX_46_u))) / t_17;
}
float tmp_11;
if (tmp_9 < 1.0f) {
float tmp_12;
if ((t_15 / t_19) > floorf(maxAniso)) {
tmp_12 = t_18;
} else {
tmp_12 = t_19 / t_17;
}
tmp_11 = fmaxf(1.0f, (t_23 * tmp_12));
} else if (t_21) {
tmp_11 = floorf(maxAniso);
} else {
tmp_11 = t_15 / fabsf((fmaf(-dY_46_u, t_6, ((dX_46_u / dX_46_v) * (t_1 * floorf(h)))) * dX_46_v));
}
tmp_8 = tmp_11;
} else if (tmp_3 < 1.0f) {
float tmp_13;
if (t_27) {
tmp_13 = floorf(maxAniso);
} else {
tmp_13 = t_26;
}
float tmp_14;
if (t_27) {
tmp_14 = sqrtf(t_24) / floorf(maxAniso);
} else {
tmp_14 = t_25;
}
tmp_8 = fmaxf(1.0f, (tmp_13 * tmp_14));
} else if (((fmaxf((t_0 + powf(t_9, 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(t_12)) / t_6) > floorf(maxAniso)) {
tmp_8 = floorf(maxAniso);
} else {
tmp_8 = t_26;
}
return tmp_8;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_1 = Float32(floor(w) * dY_46_v) t_2 = Float32(floor(h) * dY_46_v) t_3 = Float32(floor(w) * dX_46_u) t_4 = floor(w) ^ Float32(2.0) t_5 = Float32(floor(h) * dX_46_v) t_6 = Float32(floor(h) * floor(w)) t_7 = floor(h) ^ Float32(2.0) t_8 = fma(Float32(t_4 * dX_46_u), dX_46_u, Float32(Float32(t_7 * dX_46_v) * dX_46_v)) t_9 = Float32(dX_46_u * floor(w)) t_10 = Float32(t_4 * dY_46_u) t_11 = fma(t_10, dY_46_u, Float32(Float32(t_7 * dY_46_v) * dY_46_v)) t_12 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_13 = abs(Float32(t_12 * Float32(floor(w) * floor(h)))) t_14 = Float32(floor(w) * dY_46_u) t_15 = fmax(Float32(Float32(t_3 * t_3) + Float32(t_5 * t_5)), Float32(Float32(t_14 * t_14) + Float32(t_2 * t_2))) t_16 = abs(Float32(Float32(t_5 * t_14) - Float32(t_3 * t_2))) t_17 = sqrt(t_15) t_18 = Float32(t_17 / floor(maxAniso)) t_19 = abs(Float32(Float32(dX_46_u * t_2) * floor(w))) t_20 = Float32(t_15 / t_16) t_21 = t_20 > floor(maxAniso) tmp = Float32(0.0) if (t_21) tmp = t_18; else tmp = Float32(t_16 / t_17); end t_22 = tmp tmp_1 = Float32(0.0) if (t_21) tmp_1 = floor(maxAniso); else tmp_1 = t_20; end t_23 = tmp_1 t_24 = fmax(t_8, t_11) t_25 = Float32(sqrt(Float32(Float32(1.0) / t_24)) * t_13) t_26 = Float32(t_24 / t_13) t_27 = t_26 > floor(maxAniso) tmp_2 = Float32(0.0) if (t_22 < Float32(1.0)) tmp_2 = fmax(Float32(1.0), Float32(t_23 * t_22)); else tmp_2 = t_23; end tmp_3 = Float32(0.0) if (Float32(fmax(t_8, Float32(t_10 * dY_46_u)) / t_13) > floor(maxAniso)) tmp_3 = Float32(sqrt(fmax(Float32(t_0 + Float32(t_9 * t_9)), t_11)) / floor(maxAniso)); else tmp_3 = t_25; end tmp_8 = Float32(0.0) if (tmp_2 <= Float32(20.0)) tmp_9 = Float32(0.0) if (t_21) tmp_9 = t_18; else tmp_9 = Float32(abs(Float32(t_1 * Float32(floor(h) * dX_46_u))) / t_17); end tmp_11 = Float32(0.0) if (tmp_9 < Float32(1.0)) tmp_12 = Float32(0.0) if (Float32(t_15 / t_19) > floor(maxAniso)) tmp_12 = t_18; else tmp_12 = Float32(t_19 / t_17); end tmp_11 = fmax(Float32(1.0), Float32(t_23 * tmp_12)); elseif (t_21) tmp_11 = floor(maxAniso); else tmp_11 = Float32(t_15 / abs(Float32(fma(Float32(-dY_46_u), t_6, Float32(Float32(dX_46_u / dX_46_v) * Float32(t_1 * floor(h)))) * dX_46_v))); end tmp_8 = tmp_11; elseif (tmp_3 < Float32(1.0)) tmp_13 = Float32(0.0) if (t_27) tmp_13 = floor(maxAniso); else tmp_13 = t_26; end tmp_14 = Float32(0.0) if (t_27) tmp_14 = Float32(sqrt(t_24) / floor(maxAniso)); else tmp_14 = t_25; end tmp_8 = fmax(Float32(1.0), Float32(tmp_13 * tmp_14)); elseif (Float32(Float32(fmax(Float32(t_0 + (t_9 ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(t_12)) / t_6) > floor(maxAniso)) tmp_8 = floor(maxAniso); else tmp_8 = t_26; end return tmp_8 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := \left\lfloor w\right\rfloor \cdot dY.v\\
t_2 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_3 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_4 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_5 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_6 := \left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor \\
t_7 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_8 := \mathsf{fma}\left(t\_4 \cdot dX.u, dX.u, \left(t\_7 \cdot dX.v\right) \cdot dX.v\right)\\
t_9 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_10 := t\_4 \cdot dY.u\\
t_11 := \mathsf{fma}\left(t\_10, dY.u, \left(t\_7 \cdot dY.v\right) \cdot dY.v\right)\\
t_12 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_13 := \left|t\_12 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_14 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_15 := \mathsf{max}\left(t\_3 \cdot t\_3 + t\_5 \cdot t\_5, t\_14 \cdot t\_14 + t\_2 \cdot t\_2\right)\\
t_16 := \left|t\_5 \cdot t\_14 - t\_3 \cdot t\_2\right|\\
t_17 := \sqrt{t\_15}\\
t_18 := \frac{t\_17}{\left\lfloor maxAniso\right\rfloor }\\
t_19 := \left|\left(dX.u \cdot t\_2\right) \cdot \left\lfloor w\right\rfloor \right|\\
t_20 := \frac{t\_15}{t\_16}\\
t_21 := t\_20 > \left\lfloor maxAniso\right\rfloor \\
t_22 := \begin{array}{l}
\mathbf{if}\;t\_21:\\
\;\;\;\;t\_18\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_16}{t\_17}\\
\end{array}\\
t_23 := \begin{array}{l}
\mathbf{if}\;t\_21:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_20\\
\end{array}\\
t_24 := \mathsf{max}\left(t\_8, t\_11\right)\\
t_25 := \sqrt{\frac{1}{t\_24}} \cdot t\_13\\
t_26 := \frac{t\_24}{t\_13}\\
t_27 := t\_26 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;t\_22 < 1:\\
\;\;\;\;\mathsf{max}\left(1, t\_23 \cdot t\_22\right)\\
\mathbf{else}:\\
\;\;\;\;t\_23\\
\end{array} \leq 20:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;t\_21:\\
\;\;\;\;t\_18\\
\mathbf{else}:\\
\;\;\;\;\frac{\left|t\_1 \cdot \left(\left\lfloor h\right\rfloor \cdot dX.u\right)\right|}{t\_17}\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, t\_23 \cdot \begin{array}{l}
\mathbf{if}\;\frac{t\_15}{t\_19} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_18\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_19}{t\_17}\\
\end{array}\right)\\
\mathbf{elif}\;t\_21:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;\frac{t\_15}{\left|\mathsf{fma}\left(-dY.u, t\_6, \frac{dX.u}{dX.v} \cdot \left(t\_1 \cdot \left\lfloor h\right\rfloor \right)\right) \cdot dX.v\right|}\\
\end{array}\\
\mathbf{elif}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_8, t\_10 \cdot dY.u\right)}{t\_13} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\frac{\sqrt{\mathsf{max}\left(t\_0 + t\_9 \cdot t\_9, t\_11\right)}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_27:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_26\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_27:\\
\;\;\;\;\frac{\sqrt{t\_24}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_25\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left(t\_0 + {t\_9}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|t\_12\right|}}{t\_6} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_26\\
\end{array}
\end{array}
if (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) < 20Initial program 99.6%
Taylor expanded in dX.u around inf
*-commutativeN/A
associate-*r*N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower-floor.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-floor.f3298.9
Applied rewrites98.9%
Taylor expanded in dX.v around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites99.0%
Taylor expanded in dX.u around inf
associate-*r*N/A
associate-*r*N/A
lower-*.f32N/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-floor.f32N/A
lower-floor.f3299.1
Applied rewrites99.1%
Taylor expanded in dX.u around inf
associate-*r*N/A
associate-*r*N/A
lower-*.f32N/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-floor.f32N/A
lower-floor.f3299.0
Applied rewrites99.0%
if 20 < (if (<.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))) #s(literal 1 binary32)) (fmax.f32 #s(literal 1 binary32) (*.f32 (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (/.f32 (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))) (floor.f32 maxAniso)) (/.f32 (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u)))) (sqrt.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v))))))))) (if (>.f32 (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))) (floor.f32 maxAniso)) (floor.f32 maxAniso) (/.f32 (fmax.f32 (+.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 w) dX.u)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 h) dX.v))) (+.f32 (*.f32 (*.f32 (floor.f32 w) dY.u) (*.f32 (floor.f32 w) dY.u)) (*.f32 (*.f32 (floor.f32 h) dY.v) (*.f32 (floor.f32 h) dY.v)))) (fabs.f32 (-.f32 (*.f32 (*.f32 (floor.f32 w) dX.u) (*.f32 (floor.f32 h) dY.v)) (*.f32 (*.f32 (floor.f32 h) dX.v) (*.f32 (floor.f32 w) dY.u))))))) Initial program -0.0%
Taylor expanded in w around 0
Applied rewrites48.9%
Taylor expanded in dY.u around inf
Applied rewrites53.9%
Applied rewrites60.3%
Applied rewrites75.7%
Final simplification97.9%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (* (floor h) dX.v))
(t_1 (* (floor h) dY.v))
(t_2 (* (floor w) dY.u))
(t_3 (* (floor w) dX.u))
(t_4 (fmax (+ (* t_3 t_3) (* t_0 t_0)) (+ (* t_2 t_2) (* t_1 t_1))))
(t_5 (sqrt t_4))
(t_6 (fabs (- (* t_0 t_2) (* t_3 t_1))))
(t_7 (/ t_4 t_6))
(t_8 (> t_7 (floor maxAniso)))
(t_9 (if t_8 (/ t_5 (floor maxAniso)) (/ t_6 t_5))))
(if (< t_9 1.0)
(fmax 1.0 (* (if t_8 (floor maxAniso) t_7) t_9))
(if (>
(/
t_4
(fabs
(fma
(* (* (- dX.v) (floor h)) (floor w))
dY.u
(* (* (* dX.u (floor w)) dY.v) (floor h)))))
(floor maxAniso))
(floor maxAniso)
t_7))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = floorf(h) * dX_46_v;
float t_1 = floorf(h) * dY_46_v;
float t_2 = floorf(w) * dY_46_u;
float t_3 = floorf(w) * dX_46_u;
float t_4 = fmaxf(((t_3 * t_3) + (t_0 * t_0)), ((t_2 * t_2) + (t_1 * t_1)));
float t_5 = sqrtf(t_4);
float t_6 = fabsf(((t_0 * t_2) - (t_3 * t_1)));
float t_7 = t_4 / t_6;
int t_8 = t_7 > floorf(maxAniso);
float tmp;
if (t_8) {
tmp = t_5 / floorf(maxAniso);
} else {
tmp = t_6 / t_5;
}
float t_9 = tmp;
float tmp_2;
if (t_9 < 1.0f) {
float tmp_3;
if (t_8) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_7;
}
tmp_2 = fmaxf(1.0f, (tmp_3 * t_9));
} else if ((t_4 / fabsf(fmaf(((-dX_46_v * floorf(h)) * floorf(w)), dY_46_u, (((dX_46_u * floorf(w)) * dY_46_v) * floorf(h))))) > floorf(maxAniso)) {
tmp_2 = floorf(maxAniso);
} else {
tmp_2 = t_7;
}
return tmp_2;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(floor(h) * dX_46_v) t_1 = Float32(floor(h) * dY_46_v) t_2 = Float32(floor(w) * dY_46_u) t_3 = Float32(floor(w) * dX_46_u) t_4 = fmax(Float32(Float32(t_3 * t_3) + Float32(t_0 * t_0)), Float32(Float32(t_2 * t_2) + Float32(t_1 * t_1))) t_5 = sqrt(t_4) t_6 = abs(Float32(Float32(t_0 * t_2) - Float32(t_3 * t_1))) t_7 = Float32(t_4 / t_6) t_8 = t_7 > floor(maxAniso) tmp = Float32(0.0) if (t_8) tmp = Float32(t_5 / floor(maxAniso)); else tmp = Float32(t_6 / t_5); end t_9 = tmp tmp_2 = Float32(0.0) if (t_9 < Float32(1.0)) tmp_3 = Float32(0.0) if (t_8) tmp_3 = floor(maxAniso); else tmp_3 = t_7; end tmp_2 = fmax(Float32(1.0), Float32(tmp_3 * t_9)); elseif (Float32(t_4 / abs(fma(Float32(Float32(Float32(-dX_46_v) * floor(h)) * floor(w)), dY_46_u, Float32(Float32(Float32(dX_46_u * floor(w)) * dY_46_v) * floor(h))))) > floor(maxAniso)) tmp_2 = floor(maxAniso); else tmp_2 = t_7; end return tmp_2 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left\lfloor h\right\rfloor \cdot dX.v\\
t_1 := \left\lfloor h\right\rfloor \cdot dY.v\\
t_2 := \left\lfloor w\right\rfloor \cdot dY.u\\
t_3 := \left\lfloor w\right\rfloor \cdot dX.u\\
t_4 := \mathsf{max}\left(t\_3 \cdot t\_3 + t\_0 \cdot t\_0, t\_2 \cdot t\_2 + t\_1 \cdot t\_1\right)\\
t_5 := \sqrt{t\_4}\\
t_6 := \left|t\_0 \cdot t\_2 - t\_3 \cdot t\_1\right|\\
t_7 := \frac{t\_4}{t\_6}\\
t_8 := t\_7 > \left\lfloor maxAniso\right\rfloor \\
t_9 := \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\frac{t\_5}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;\frac{t\_6}{t\_5}\\
\end{array}\\
\mathbf{if}\;t\_9 < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_8:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array} \cdot t\_9\right)\\
\mathbf{elif}\;\frac{t\_4}{\left|\mathsf{fma}\left(\left(\left(-dX.v\right) \cdot \left\lfloor h\right\rfloor \right) \cdot \left\lfloor w\right\rfloor , dY.u, \left(\left(dX.u \cdot \left\lfloor w\right\rfloor \right) \cdot dY.v\right) \cdot \left\lfloor h\right\rfloor \right)\right|} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}
\end{array}
Initial program 95.0%
lift--.f32N/A
lift-*.f32N/A
fp-cancel-sub-sign-invN/A
+-commutativeN/A
lift-*.f32N/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
distribute-lft-neg-inN/A
lower-*.f32N/A
lower-neg.f3297.0
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
Applied rewrites97.0%
Final simplification97.0%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0
(fmax
(+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0))))
(t_1 (* (- dY.v) dX.u))
(t_2 (fma dY.u dX.v t_1))
(t_3 (fabs (* t_2 (* (floor w) (floor h)))))
(t_4 (pow (floor h) 2.0))
(t_5 (pow (floor w) 2.0))
(t_6 (* t_5 dY.u))
(t_7 (fma (* t_5 dX.u) dX.u (* (* t_4 dX.v) dX.v)))
(t_8 (fmax t_7 (fma t_6 dY.u (* (* t_4 dY.v) dY.v))))
(t_9 (/ t_8 t_3))
(t_10 (> t_9 (floor maxAniso)))
(t_11 (/ (sqrt t_8) (floor maxAniso)))
(t_12 (sqrt (/ 1.0 t_8)))
(t_13 (* t_12 t_3))
(t_14
(fmax 1.0 (* (if t_10 (floor maxAniso) t_9) (if t_10 t_11 t_13))))
(t_15
(fabs (* (* (- (* dY.v dX.u) (* dY.u dX.v)) (floor w)) (floor h)))))
(if (<= dY.v -1.7999999428779406e-20)
(if (< (if (> (/ t_8 t_15) (floor maxAniso)) t_11 (* t_12 t_15)) 1.0)
t_14
(if (> (/ (/ t_0 (* (fabs t_2) (floor w))) (floor h)) (floor maxAniso))
(floor maxAniso)
t_9))
(if (<
(if (> (/ (fmax t_7 (* t_6 dY.u)) t_3) (floor maxAniso)) t_11 t_13)
1.0)
t_14
(if (>
(/ (/ t_0 (fabs (fma dX.v dY.u t_1))) (* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_9)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = fmaxf((powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f)));
float t_1 = -dY_46_v * dX_46_u;
float t_2 = fmaf(dY_46_u, dX_46_v, t_1);
float t_3 = fabsf((t_2 * (floorf(w) * floorf(h))));
float t_4 = powf(floorf(h), 2.0f);
float t_5 = powf(floorf(w), 2.0f);
float t_6 = t_5 * dY_46_u;
float t_7 = fmaf((t_5 * dX_46_u), dX_46_u, ((t_4 * dX_46_v) * dX_46_v));
float t_8 = fmaxf(t_7, fmaf(t_6, dY_46_u, ((t_4 * dY_46_v) * dY_46_v)));
float t_9 = t_8 / t_3;
int t_10 = t_9 > floorf(maxAniso);
float t_11 = sqrtf(t_8) / floorf(maxAniso);
float t_12 = sqrtf((1.0f / t_8));
float t_13 = t_12 * t_3;
float tmp;
if (t_10) {
tmp = floorf(maxAniso);
} else {
tmp = t_9;
}
float tmp_1;
if (t_10) {
tmp_1 = t_11;
} else {
tmp_1 = t_13;
}
float t_14 = fmaxf(1.0f, (tmp * tmp_1));
float t_15 = fabsf(((((dY_46_v * dX_46_u) - (dY_46_u * dX_46_v)) * floorf(w)) * floorf(h)));
float tmp_2;
if ((fmaxf(t_7, (t_6 * dY_46_u)) / t_3) > floorf(maxAniso)) {
tmp_2 = t_11;
} else {
tmp_2 = t_13;
}
float tmp_5;
if (dY_46_v <= -1.7999999428779406e-20f) {
float tmp_6;
if ((t_8 / t_15) > floorf(maxAniso)) {
tmp_6 = t_11;
} else {
tmp_6 = t_12 * t_15;
}
float tmp_7;
if (tmp_6 < 1.0f) {
tmp_7 = t_14;
} else if (((t_0 / (fabsf(t_2) * floorf(w))) / floorf(h)) > floorf(maxAniso)) {
tmp_7 = floorf(maxAniso);
} else {
tmp_7 = t_9;
}
tmp_5 = tmp_7;
} else if (tmp_2 < 1.0f) {
tmp_5 = t_14;
} else if (((t_0 / fabsf(fmaf(dX_46_v, dY_46_u, t_1))) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_5 = floorf(maxAniso);
} else {
tmp_5 = t_9;
}
return tmp_5;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = fmax(Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) t_1 = Float32(Float32(-dY_46_v) * dX_46_u) t_2 = fma(dY_46_u, dX_46_v, t_1) t_3 = abs(Float32(t_2 * Float32(floor(w) * floor(h)))) t_4 = floor(h) ^ Float32(2.0) t_5 = floor(w) ^ Float32(2.0) t_6 = Float32(t_5 * dY_46_u) t_7 = fma(Float32(t_5 * dX_46_u), dX_46_u, Float32(Float32(t_4 * dX_46_v) * dX_46_v)) t_8 = fmax(t_7, fma(t_6, dY_46_u, Float32(Float32(t_4 * dY_46_v) * dY_46_v))) t_9 = Float32(t_8 / t_3) t_10 = t_9 > floor(maxAniso) t_11 = Float32(sqrt(t_8) / floor(maxAniso)) t_12 = sqrt(Float32(Float32(1.0) / t_8)) t_13 = Float32(t_12 * t_3) tmp = Float32(0.0) if (t_10) tmp = floor(maxAniso); else tmp = t_9; end tmp_1 = Float32(0.0) if (t_10) tmp_1 = t_11; else tmp_1 = t_13; end t_14 = fmax(Float32(1.0), Float32(tmp * tmp_1)) t_15 = abs(Float32(Float32(Float32(Float32(dY_46_v * dX_46_u) - Float32(dY_46_u * dX_46_v)) * floor(w)) * floor(h))) tmp_2 = Float32(0.0) if (Float32(fmax(t_7, Float32(t_6 * dY_46_u)) / t_3) > floor(maxAniso)) tmp_2 = t_11; else tmp_2 = t_13; end tmp_5 = Float32(0.0) if (dY_46_v <= Float32(-1.7999999428779406e-20)) tmp_6 = Float32(0.0) if (Float32(t_8 / t_15) > floor(maxAniso)) tmp_6 = t_11; else tmp_6 = Float32(t_12 * t_15); end tmp_7 = Float32(0.0) if (tmp_6 < Float32(1.0)) tmp_7 = t_14; elseif (Float32(Float32(t_0 / Float32(abs(t_2) * floor(w))) / floor(h)) > floor(maxAniso)) tmp_7 = floor(maxAniso); else tmp_7 = t_9; end tmp_5 = tmp_7; elseif (tmp_2 < Float32(1.0)) tmp_5 = t_14; elseif (Float32(Float32(t_0 / abs(fma(dX_46_v, dY_46_u, t_1))) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_5 = floor(maxAniso); else tmp_5 = t_9; end return tmp_5 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{max}\left({\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)\\
t_1 := \left(-dY.v\right) \cdot dX.u\\
t_2 := \mathsf{fma}\left(dY.u, dX.v, t\_1\right)\\
t_3 := \left|t\_2 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_4 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_5 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_6 := t\_5 \cdot dY.u\\
t_7 := \mathsf{fma}\left(t\_5 \cdot dX.u, dX.u, \left(t\_4 \cdot dX.v\right) \cdot dX.v\right)\\
t_8 := \mathsf{max}\left(t\_7, \mathsf{fma}\left(t\_6, dY.u, \left(t\_4 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_9 := \frac{t\_8}{t\_3}\\
t_10 := t\_9 > \left\lfloor maxAniso\right\rfloor \\
t_11 := \frac{\sqrt{t\_8}}{\left\lfloor maxAniso\right\rfloor }\\
t_12 := \sqrt{\frac{1}{t\_8}}\\
t_13 := t\_12 \cdot t\_3\\
t_14 := \mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_10:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_10:\\
\;\;\;\;t\_11\\
\mathbf{else}:\\
\;\;\;\;t\_13\\
\end{array}\right)\\
t_15 := \left|\left(\left(dY.v \cdot dX.u - dY.u \cdot dX.v\right) \cdot \left\lfloor w\right\rfloor \right) \cdot \left\lfloor h\right\rfloor \right|\\
\mathbf{if}\;dY.v \leq -1.7999999428779406 \cdot 10^{-20}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{t\_8}{t\_15} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_11\\
\mathbf{else}:\\
\;\;\;\;t\_12 \cdot t\_15\\
\end{array} < 1:\\
\;\;\;\;t\_14\\
\mathbf{elif}\;\frac{\frac{t\_0}{\left|t\_2\right| \cdot \left\lfloor w\right\rfloor }}{\left\lfloor h\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array}\\
\mathbf{elif}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_7, t\_6 \cdot dY.u\right)}{t\_3} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_11\\
\mathbf{else}:\\
\;\;\;\;t\_13\\
\end{array} < 1:\\
\;\;\;\;t\_14\\
\mathbf{elif}\;\frac{\frac{t\_0}{\left|\mathsf{fma}\left(dX.v, dY.u, t\_1\right)\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array}
\end{array}
if dY.v < -1.79999994e-20Initial program 93.6%
Taylor expanded in w around 0
Applied rewrites29.8%
Taylor expanded in w around 0
Applied rewrites38.8%
Applied rewrites95.3%
if -1.79999994e-20 < dY.v Initial program 96.5%
Taylor expanded in w around 0
Applied rewrites35.0%
Taylor expanded in dY.u around inf
Applied rewrites48.6%
Applied rewrites59.1%
Applied rewrites64.0%
Final simplification88.8%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (floor h) 2.0))
(t_1 (pow (floor w) 2.0))
(t_2 (fma (* t_1 dX.u) dX.u (* (* t_0 dX.v) dX.v)))
(t_3 (* t_1 dY.u))
(t_4 (fmax t_2 (fma t_3 dY.u (* (* t_0 dY.v) dY.v))))
(t_5 (* (- dY.v) dX.u))
(t_6 (fabs (* (fma dY.u dX.v t_5) (* (floor w) (floor h)))))
(t_7 (/ t_4 t_6))
(t_8 (* (sqrt (/ 1.0 t_4)) t_6))
(t_9 (> t_7 (floor maxAniso)))
(t_10 (> (/ (fmax t_2 (* t_3 dY.u)) t_6) (floor maxAniso)))
(t_11 (pow (* dY.u (floor w)) 2.0))
(t_12 (fmax t_2 (fma t_0 (* dY.v dY.v) t_11)))
(t_13 (/ (sqrt t_4) (floor maxAniso)))
(t_14 (fmax 1.0 (* (if t_9 (floor maxAniso) t_7) (if t_9 t_13 t_8)))))
(if (<= dY.u -20000000000.0)
(if (< (if t_10 (/ (sqrt t_12) (floor maxAniso)) t_8) 1.0)
t_14
(if (> (/ t_12 t_6) (floor maxAniso)) (floor maxAniso) t_7))
(if (< (if t_10 t_13 t_8) 1.0)
t_14
(if (>
(/
(/
(fmax
(+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0))
(+ (pow (* dY.v (floor h)) 2.0) t_11))
(fabs (fma dX.v dY.u t_5)))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_7)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf(floorf(h), 2.0f);
float t_1 = powf(floorf(w), 2.0f);
float t_2 = fmaf((t_1 * dX_46_u), dX_46_u, ((t_0 * dX_46_v) * dX_46_v));
float t_3 = t_1 * dY_46_u;
float t_4 = fmaxf(t_2, fmaf(t_3, dY_46_u, ((t_0 * dY_46_v) * dY_46_v)));
float t_5 = -dY_46_v * dX_46_u;
float t_6 = fabsf((fmaf(dY_46_u, dX_46_v, t_5) * (floorf(w) * floorf(h))));
float t_7 = t_4 / t_6;
float t_8 = sqrtf((1.0f / t_4)) * t_6;
int t_9 = t_7 > floorf(maxAniso);
int t_10 = (fmaxf(t_2, (t_3 * dY_46_u)) / t_6) > floorf(maxAniso);
float t_11 = powf((dY_46_u * floorf(w)), 2.0f);
float t_12 = fmaxf(t_2, fmaf(t_0, (dY_46_v * dY_46_v), t_11));
float t_13 = sqrtf(t_4) / floorf(maxAniso);
float tmp;
if (t_9) {
tmp = floorf(maxAniso);
} else {
tmp = t_7;
}
float tmp_1;
if (t_9) {
tmp_1 = t_13;
} else {
tmp_1 = t_8;
}
float t_14 = fmaxf(1.0f, (tmp * tmp_1));
float tmp_2;
if (t_10) {
tmp_2 = t_13;
} else {
tmp_2 = t_8;
}
float tmp_5;
if (dY_46_u <= -20000000000.0f) {
float tmp_6;
if (t_10) {
tmp_6 = sqrtf(t_12) / floorf(maxAniso);
} else {
tmp_6 = t_8;
}
float tmp_7;
if (tmp_6 < 1.0f) {
tmp_7 = t_14;
} else if ((t_12 / t_6) > floorf(maxAniso)) {
tmp_7 = floorf(maxAniso);
} else {
tmp_7 = t_7;
}
tmp_5 = tmp_7;
} else if (tmp_2 < 1.0f) {
tmp_5 = t_14;
} else if (((fmaxf((powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + t_11)) / fabsf(fmaf(dX_46_v, dY_46_u, t_5))) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_5 = floorf(maxAniso);
} else {
tmp_5 = t_7;
}
return tmp_5;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(h) ^ Float32(2.0) t_1 = floor(w) ^ Float32(2.0) t_2 = fma(Float32(t_1 * dX_46_u), dX_46_u, Float32(Float32(t_0 * dX_46_v) * dX_46_v)) t_3 = Float32(t_1 * dY_46_u) t_4 = fmax(t_2, fma(t_3, dY_46_u, Float32(Float32(t_0 * dY_46_v) * dY_46_v))) t_5 = Float32(Float32(-dY_46_v) * dX_46_u) t_6 = abs(Float32(fma(dY_46_u, dX_46_v, t_5) * Float32(floor(w) * floor(h)))) t_7 = Float32(t_4 / t_6) t_8 = Float32(sqrt(Float32(Float32(1.0) / t_4)) * t_6) t_9 = t_7 > floor(maxAniso) t_10 = Float32(fmax(t_2, Float32(t_3 * dY_46_u)) / t_6) > floor(maxAniso) t_11 = Float32(dY_46_u * floor(w)) ^ Float32(2.0) t_12 = fmax(t_2, fma(t_0, Float32(dY_46_v * dY_46_v), t_11)) t_13 = Float32(sqrt(t_4) / floor(maxAniso)) tmp = Float32(0.0) if (t_9) tmp = floor(maxAniso); else tmp = t_7; end tmp_1 = Float32(0.0) if (t_9) tmp_1 = t_13; else tmp_1 = t_8; end t_14 = fmax(Float32(1.0), Float32(tmp * tmp_1)) tmp_2 = Float32(0.0) if (t_10) tmp_2 = t_13; else tmp_2 = t_8; end tmp_5 = Float32(0.0) if (dY_46_u <= Float32(-20000000000.0)) tmp_6 = Float32(0.0) if (t_10) tmp_6 = Float32(sqrt(t_12) / floor(maxAniso)); else tmp_6 = t_8; end tmp_7 = Float32(0.0) if (tmp_6 < Float32(1.0)) tmp_7 = t_14; elseif (Float32(t_12 / t_6) > floor(maxAniso)) tmp_7 = floor(maxAniso); else tmp_7 = t_7; end tmp_5 = tmp_7; elseif (tmp_2 < Float32(1.0)) tmp_5 = t_14; elseif (Float32(Float32(fmax(Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + t_11)) / abs(fma(dX_46_v, dY_46_u, t_5))) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_5 = floor(maxAniso); else tmp_5 = t_7; end return tmp_5 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_2 := \mathsf{fma}\left(t\_1 \cdot dX.u, dX.u, \left(t\_0 \cdot dX.v\right) \cdot dX.v\right)\\
t_3 := t\_1 \cdot dY.u\\
t_4 := \mathsf{max}\left(t\_2, \mathsf{fma}\left(t\_3, dY.u, \left(t\_0 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_5 := \left(-dY.v\right) \cdot dX.u\\
t_6 := \left|\mathsf{fma}\left(dY.u, dX.v, t\_5\right) \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_7 := \frac{t\_4}{t\_6}\\
t_8 := \sqrt{\frac{1}{t\_4}} \cdot t\_6\\
t_9 := t\_7 > \left\lfloor maxAniso\right\rfloor \\
t_10 := \frac{\mathsf{max}\left(t\_2, t\_3 \cdot dY.u\right)}{t\_6} > \left\lfloor maxAniso\right\rfloor \\
t_11 := {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\\
t_12 := \mathsf{max}\left(t\_2, \mathsf{fma}\left(t\_0, dY.v \cdot dY.v, t\_11\right)\right)\\
t_13 := \frac{\sqrt{t\_4}}{\left\lfloor maxAniso\right\rfloor }\\
t_14 := \mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_9:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_9:\\
\;\;\;\;t\_13\\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array}\right)\\
\mathbf{if}\;dY.u \leq -20000000000:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;t\_10:\\
\;\;\;\;\frac{\sqrt{t\_12}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array} < 1:\\
\;\;\;\;t\_14\\
\mathbf{elif}\;\frac{t\_12}{t\_6} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}\\
\mathbf{elif}\;\begin{array}{l}
\mathbf{if}\;t\_10:\\
\;\;\;\;t\_13\\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array} < 1:\\
\;\;\;\;t\_14\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left({\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + t\_11\right)}{\left|\mathsf{fma}\left(dX.v, dY.u, t\_5\right)\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}
\end{array}
if dY.u < -2e10Initial program 85.8%
Taylor expanded in w around 0
Applied rewrites36.5%
Taylor expanded in dY.u around inf
Applied rewrites51.4%
Applied rewrites41.9%
Applied rewrites50.4%
if -2e10 < dY.u Initial program 96.7%
Taylor expanded in w around 0
Applied rewrites31.8%
Taylor expanded in dY.u around inf
Applied rewrites44.6%
Applied rewrites54.4%
Applied rewrites59.3%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (* (- dY.v) dX.u))
(t_1 (pow (floor w) 2.0))
(t_2 (* t_1 dY.u))
(t_3 (pow (floor h) 2.0))
(t_4 (fma (* t_1 dX.u) dX.u (* (* t_3 dX.v) dX.v)))
(t_5 (fmax t_4 (fma t_2 dY.u (* (* t_3 dY.v) dY.v))))
(t_6 (/ (sqrt t_5) (floor maxAniso)))
(t_7 (fabs (* (fma dY.u dX.v t_0) (* (floor w) (floor h)))))
(t_8 (/ t_5 t_7))
(t_9 (> t_8 (floor maxAniso)))
(t_10 (* (sqrt (/ 1.0 t_5)) t_7)))
(if (<
(if (> (/ (fmax t_4 (* t_2 dY.u)) t_7) (floor maxAniso)) t_6 t_10)
1.0)
(fmax 1.0 (* (if t_9 (floor maxAniso) t_8) (if t_9 t_6 t_10)))
(if (>
(/
(/
(fmax
(+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs (fma dX.v dY.u t_0)))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_8))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = -dY_46_v * dX_46_u;
float t_1 = powf(floorf(w), 2.0f);
float t_2 = t_1 * dY_46_u;
float t_3 = powf(floorf(h), 2.0f);
float t_4 = fmaf((t_1 * dX_46_u), dX_46_u, ((t_3 * dX_46_v) * dX_46_v));
float t_5 = fmaxf(t_4, fmaf(t_2, dY_46_u, ((t_3 * dY_46_v) * dY_46_v)));
float t_6 = sqrtf(t_5) / floorf(maxAniso);
float t_7 = fabsf((fmaf(dY_46_u, dX_46_v, t_0) * (floorf(w) * floorf(h))));
float t_8 = t_5 / t_7;
int t_9 = t_8 > floorf(maxAniso);
float t_10 = sqrtf((1.0f / t_5)) * t_7;
float tmp;
if ((fmaxf(t_4, (t_2 * dY_46_u)) / t_7) > floorf(maxAniso)) {
tmp = t_6;
} else {
tmp = t_10;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if (t_9) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_8;
}
float tmp_5;
if (t_9) {
tmp_5 = t_6;
} else {
tmp_5 = t_10;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if (((fmaxf((powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(fmaf(dX_46_v, dY_46_u, t_0))) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_8;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(Float32(-dY_46_v) * dX_46_u) t_1 = floor(w) ^ Float32(2.0) t_2 = Float32(t_1 * dY_46_u) t_3 = floor(h) ^ Float32(2.0) t_4 = fma(Float32(t_1 * dX_46_u), dX_46_u, Float32(Float32(t_3 * dX_46_v) * dX_46_v)) t_5 = fmax(t_4, fma(t_2, dY_46_u, Float32(Float32(t_3 * dY_46_v) * dY_46_v))) t_6 = Float32(sqrt(t_5) / floor(maxAniso)) t_7 = abs(Float32(fma(dY_46_u, dX_46_v, t_0) * Float32(floor(w) * floor(h)))) t_8 = Float32(t_5 / t_7) t_9 = t_8 > floor(maxAniso) t_10 = Float32(sqrt(Float32(Float32(1.0) / t_5)) * t_7) tmp = Float32(0.0) if (Float32(fmax(t_4, Float32(t_2 * dY_46_u)) / t_7) > floor(maxAniso)) tmp = t_6; else tmp = t_10; end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (t_9) tmp_4 = floor(maxAniso); else tmp_4 = t_8; end tmp_5 = Float32(0.0) if (t_9) tmp_5 = t_6; else tmp_5 = t_10; end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (Float32(Float32(fmax(Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(fma(dX_46_v, dY_46_u, t_0))) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_3 = floor(maxAniso); else tmp_3 = t_8; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(-dY.v\right) \cdot dX.u\\
t_1 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_2 := t\_1 \cdot dY.u\\
t_3 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_4 := \mathsf{fma}\left(t\_1 \cdot dX.u, dX.u, \left(t\_3 \cdot dX.v\right) \cdot dX.v\right)\\
t_5 := \mathsf{max}\left(t\_4, \mathsf{fma}\left(t\_2, dY.u, \left(t\_3 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_6 := \frac{\sqrt{t\_5}}{\left\lfloor maxAniso\right\rfloor }\\
t_7 := \left|\mathsf{fma}\left(dY.u, dX.v, t\_0\right) \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_8 := \frac{t\_5}{t\_7}\\
t_9 := t\_8 > \left\lfloor maxAniso\right\rfloor \\
t_10 := \sqrt{\frac{1}{t\_5}} \cdot t\_7\\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_4, t\_2 \cdot dY.u\right)}{t\_7} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_6\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_9:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_9:\\
\;\;\;\;t\_6\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left({\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|\mathsf{fma}\left(dX.v, dY.u, t\_0\right)\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites31.4%
Taylor expanded in dY.u around inf
Applied rewrites46.3%
Applied rewrites55.2%
Applied rewrites61.7%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (floor h) 2.0))
(t_1 (pow (* dX.v (floor h)) 2.0))
(t_2 (* dX.u (floor w)))
(t_3 (pow (floor w) 2.0))
(t_4 (* t_3 dY.u))
(t_5 (fma t_4 dY.u (* (* t_0 dY.v) dY.v)))
(t_6 (fma (* t_3 dX.u) dX.u (* (* t_0 dX.v) dX.v)))
(t_7 (fmax t_6 t_5))
(t_8 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_9 (fabs (* t_8 (* (floor w) (floor h)))))
(t_10 (* (sqrt (/ 1.0 t_7)) t_9))
(t_11 (/ t_7 t_9))
(t_12 (> t_11 (floor maxAniso))))
(if (<
(if (> (/ (fmax t_6 (* t_4 dY.u)) t_9) (floor maxAniso))
(/ (sqrt (fmax (+ t_1 (* t_2 t_2)) t_5)) (floor maxAniso))
t_10)
1.0)
(fmax
1.0
(*
(if t_12 (floor maxAniso) t_11)
(if t_12 (/ (sqrt t_7) (floor maxAniso)) t_10)))
(if (>
(/
(/
(fmax
(+ t_1 (pow t_2 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs t_8))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_11))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf(floorf(h), 2.0f);
float t_1 = powf((dX_46_v * floorf(h)), 2.0f);
float t_2 = dX_46_u * floorf(w);
float t_3 = powf(floorf(w), 2.0f);
float t_4 = t_3 * dY_46_u;
float t_5 = fmaf(t_4, dY_46_u, ((t_0 * dY_46_v) * dY_46_v));
float t_6 = fmaf((t_3 * dX_46_u), dX_46_u, ((t_0 * dX_46_v) * dX_46_v));
float t_7 = fmaxf(t_6, t_5);
float t_8 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_9 = fabsf((t_8 * (floorf(w) * floorf(h))));
float t_10 = sqrtf((1.0f / t_7)) * t_9;
float t_11 = t_7 / t_9;
int t_12 = t_11 > floorf(maxAniso);
float tmp;
if ((fmaxf(t_6, (t_4 * dY_46_u)) / t_9) > floorf(maxAniso)) {
tmp = sqrtf(fmaxf((t_1 + (t_2 * t_2)), t_5)) / floorf(maxAniso);
} else {
tmp = t_10;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if (t_12) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_11;
}
float tmp_5;
if (t_12) {
tmp_5 = sqrtf(t_7) / floorf(maxAniso);
} else {
tmp_5 = t_10;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if (((fmaxf((t_1 + powf(t_2, 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(t_8)) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_11;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(h) ^ Float32(2.0) t_1 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_2 = Float32(dX_46_u * floor(w)) t_3 = floor(w) ^ Float32(2.0) t_4 = Float32(t_3 * dY_46_u) t_5 = fma(t_4, dY_46_u, Float32(Float32(t_0 * dY_46_v) * dY_46_v)) t_6 = fma(Float32(t_3 * dX_46_u), dX_46_u, Float32(Float32(t_0 * dX_46_v) * dX_46_v)) t_7 = fmax(t_6, t_5) t_8 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_9 = abs(Float32(t_8 * Float32(floor(w) * floor(h)))) t_10 = Float32(sqrt(Float32(Float32(1.0) / t_7)) * t_9) t_11 = Float32(t_7 / t_9) t_12 = t_11 > floor(maxAniso) tmp = Float32(0.0) if (Float32(fmax(t_6, Float32(t_4 * dY_46_u)) / t_9) > floor(maxAniso)) tmp = Float32(sqrt(fmax(Float32(t_1 + Float32(t_2 * t_2)), t_5)) / floor(maxAniso)); else tmp = t_10; end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (t_12) tmp_4 = floor(maxAniso); else tmp_4 = t_11; end tmp_5 = Float32(0.0) if (t_12) tmp_5 = Float32(sqrt(t_7) / floor(maxAniso)); else tmp_5 = t_10; end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (Float32(Float32(fmax(Float32(t_1 + (t_2 ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(t_8)) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_3 = floor(maxAniso); else tmp_3 = t_11; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_2 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_3 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_4 := t\_3 \cdot dY.u\\
t_5 := \mathsf{fma}\left(t\_4, dY.u, \left(t\_0 \cdot dY.v\right) \cdot dY.v\right)\\
t_6 := \mathsf{fma}\left(t\_3 \cdot dX.u, dX.u, \left(t\_0 \cdot dX.v\right) \cdot dX.v\right)\\
t_7 := \mathsf{max}\left(t\_6, t\_5\right)\\
t_8 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_9 := \left|t\_8 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_10 := \sqrt{\frac{1}{t\_7}} \cdot t\_9\\
t_11 := \frac{t\_7}{t\_9}\\
t_12 := t\_11 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_6, t\_4 \cdot dY.u\right)}{t\_9} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\frac{\sqrt{\mathsf{max}\left(t\_1 + t\_2 \cdot t\_2, t\_5\right)}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_12:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_11\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_12:\\
\;\;\;\;\frac{\sqrt{t\_7}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left(t\_1 + {t\_2}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|t\_8\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_11\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites31.5%
Taylor expanded in dY.u around inf
Applied rewrites46.8%
Applied rewrites56.0%
Applied rewrites65.5%
Final simplification64.9%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (floor w) 2.0))
(t_1 (* t_0 dY.u))
(t_2 (* (floor w) (floor h)))
(t_3 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_4 (fabs (* t_3 t_2)))
(t_5 (pow (floor h) 2.0))
(t_6 (fma (* t_0 dX.u) dX.u (* (* t_5 dX.v) dX.v)))
(t_7 (fmax t_6 (fma t_1 dY.u (* (* t_5 dY.v) dY.v))))
(t_8 (/ (sqrt t_7) (floor maxAniso)))
(t_9 (/ t_7 t_4))
(t_10 (* (sqrt (/ 1.0 t_7)) t_4))
(t_11 (> t_9 (floor maxAniso))))
(if (<
(if (>
(/ (fmax t_6 (* t_1 dY.u)) (fabs (* (* dY.u dX.v) t_2)))
(floor maxAniso))
t_8
t_10)
1.0)
(fmax 1.0 (* (if t_11 (floor maxAniso) t_9) (if t_11 t_8 t_10)))
(if (>
(/
(/
(fmax
(+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(fabs t_3))
(* (floor h) (floor w)))
(floor maxAniso))
(floor maxAniso)
t_9))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf(floorf(w), 2.0f);
float t_1 = t_0 * dY_46_u;
float t_2 = floorf(w) * floorf(h);
float t_3 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_4 = fabsf((t_3 * t_2));
float t_5 = powf(floorf(h), 2.0f);
float t_6 = fmaf((t_0 * dX_46_u), dX_46_u, ((t_5 * dX_46_v) * dX_46_v));
float t_7 = fmaxf(t_6, fmaf(t_1, dY_46_u, ((t_5 * dY_46_v) * dY_46_v)));
float t_8 = sqrtf(t_7) / floorf(maxAniso);
float t_9 = t_7 / t_4;
float t_10 = sqrtf((1.0f / t_7)) * t_4;
int t_11 = t_9 > floorf(maxAniso);
float tmp;
if ((fmaxf(t_6, (t_1 * dY_46_u)) / fabsf(((dY_46_u * dX_46_v) * t_2))) > floorf(maxAniso)) {
tmp = t_8;
} else {
tmp = t_10;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if (t_11) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_9;
}
float tmp_5;
if (t_11) {
tmp_5 = t_8;
} else {
tmp_5 = t_10;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if (((fmaxf((powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / fabsf(t_3)) / (floorf(h) * floorf(w))) > floorf(maxAniso)) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_9;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(w) ^ Float32(2.0) t_1 = Float32(t_0 * dY_46_u) t_2 = Float32(floor(w) * floor(h)) t_3 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_4 = abs(Float32(t_3 * t_2)) t_5 = floor(h) ^ Float32(2.0) t_6 = fma(Float32(t_0 * dX_46_u), dX_46_u, Float32(Float32(t_5 * dX_46_v) * dX_46_v)) t_7 = fmax(t_6, fma(t_1, dY_46_u, Float32(Float32(t_5 * dY_46_v) * dY_46_v))) t_8 = Float32(sqrt(t_7) / floor(maxAniso)) t_9 = Float32(t_7 / t_4) t_10 = Float32(sqrt(Float32(Float32(1.0) / t_7)) * t_4) t_11 = t_9 > floor(maxAniso) tmp = Float32(0.0) if (Float32(fmax(t_6, Float32(t_1 * dY_46_u)) / abs(Float32(Float32(dY_46_u * dX_46_v) * t_2))) > floor(maxAniso)) tmp = t_8; else tmp = t_10; end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (t_11) tmp_4 = floor(maxAniso); else tmp_4 = t_9; end tmp_5 = Float32(0.0) if (t_11) tmp_5 = t_8; else tmp_5 = t_10; end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (Float32(Float32(fmax(Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / abs(t_3)) / Float32(floor(h) * floor(w))) > floor(maxAniso)) tmp_3 = floor(maxAniso); else tmp_3 = t_9; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_1 := t\_0 \cdot dY.u\\
t_2 := \left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \\
t_3 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_4 := \left|t\_3 \cdot t\_2\right|\\
t_5 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_6 := \mathsf{fma}\left(t\_0 \cdot dX.u, dX.u, \left(t\_5 \cdot dX.v\right) \cdot dX.v\right)\\
t_7 := \mathsf{max}\left(t\_6, \mathsf{fma}\left(t\_1, dY.u, \left(t\_5 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_8 := \frac{\sqrt{t\_7}}{\left\lfloor maxAniso\right\rfloor }\\
t_9 := \frac{t\_7}{t\_4}\\
t_10 := \sqrt{\frac{1}{t\_7}} \cdot t\_4\\
t_11 := t\_9 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_6, t\_1 \cdot dY.u\right)}{\left|\left(dY.u \cdot dX.v\right) \cdot t\_2\right|} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_8\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;t\_11:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_11:\\
\;\;\;\;t\_8\\
\mathbf{else}:\\
\;\;\;\;t\_10\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\frac{\mathsf{max}\left({\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left|t\_3\right|}}{\left\lfloor h\right\rfloor \cdot \left\lfloor w\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites31.5%
Taylor expanded in dY.u around inf
Applied rewrites44.6%
Applied rewrites56.5%
Taylor expanded in dX.u around 0
Applied rewrites67.9%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (* dX.v (floor h)) 2.0))
(t_1 (* dX.u (floor w)))
(t_2 (* dY.v (floor h)))
(t_3 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_4 (fabs (* t_3 (* (floor w) (floor h)))))
(t_5 (* dY.u (floor w)))
(t_6 (pow t_5 2.0))
(t_7 (pow (floor w) 2.0))
(t_8 (* t_7 dY.u))
(t_9 (pow (floor h) 2.0))
(t_10 (fma (* t_7 dX.u) dX.u (* (* t_9 dX.v) dX.v)))
(t_11 (fma t_8 dY.u (* (* t_9 dY.v) dY.v)))
(t_12 (fmax t_10 t_11))
(t_13 (/ t_12 t_4))
(t_14 (/ (sqrt t_12) (floor maxAniso)))
(t_15 (* (sqrt (/ 1.0 t_12)) t_4))
(t_16
(<
(if (> (/ (fmax t_10 (* t_8 dY.u)) t_4) (floor maxAniso)) t_14 t_15)
1.0))
(t_17 (pow t_2 2.0))
(t_18
(fmax
1.0
(*
(if (>
(/
(fmax (+ t_0 (pow t_1 2.0)) (+ t_17 t_6))
(* (* t_3 (floor w)) (floor h)))
(floor maxAniso))
(floor maxAniso)
t_13)
(if (> t_13 (floor maxAniso)) t_14 t_15)))))
(if (<= dX.u 0.004999999888241291)
(if t_16
t_18
(if (>
(/
(fmax t_10 (/ (- (pow t_2 4.0) (pow t_5 4.0)) (- t_17 t_6)))
t_4)
(floor maxAniso))
(floor maxAniso)
t_13))
(if t_16
t_18
(if (> (/ (fmax (+ t_0 (* t_1 t_1)) t_11) t_4) (floor maxAniso))
(floor maxAniso)
t_13)))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf((dX_46_v * floorf(h)), 2.0f);
float t_1 = dX_46_u * floorf(w);
float t_2 = dY_46_v * floorf(h);
float t_3 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_4 = fabsf((t_3 * (floorf(w) * floorf(h))));
float t_5 = dY_46_u * floorf(w);
float t_6 = powf(t_5, 2.0f);
float t_7 = powf(floorf(w), 2.0f);
float t_8 = t_7 * dY_46_u;
float t_9 = powf(floorf(h), 2.0f);
float t_10 = fmaf((t_7 * dX_46_u), dX_46_u, ((t_9 * dX_46_v) * dX_46_v));
float t_11 = fmaf(t_8, dY_46_u, ((t_9 * dY_46_v) * dY_46_v));
float t_12 = fmaxf(t_10, t_11);
float t_13 = t_12 / t_4;
float t_14 = sqrtf(t_12) / floorf(maxAniso);
float t_15 = sqrtf((1.0f / t_12)) * t_4;
float tmp;
if ((fmaxf(t_10, (t_8 * dY_46_u)) / t_4) > floorf(maxAniso)) {
tmp = t_14;
} else {
tmp = t_15;
}
int t_16 = tmp < 1.0f;
float t_17 = powf(t_2, 2.0f);
float tmp_1;
if ((fmaxf((t_0 + powf(t_1, 2.0f)), (t_17 + t_6)) / ((t_3 * floorf(w)) * floorf(h))) > floorf(maxAniso)) {
tmp_1 = floorf(maxAniso);
} else {
tmp_1 = t_13;
}
float tmp_2;
if (t_13 > floorf(maxAniso)) {
tmp_2 = t_14;
} else {
tmp_2 = t_15;
}
float t_18 = fmaxf(1.0f, (tmp_1 * tmp_2));
float tmp_4;
if (dX_46_u <= 0.004999999888241291f) {
float tmp_5;
if (t_16) {
tmp_5 = t_18;
} else if ((fmaxf(t_10, ((powf(t_2, 4.0f) - powf(t_5, 4.0f)) / (t_17 - t_6))) / t_4) > floorf(maxAniso)) {
tmp_5 = floorf(maxAniso);
} else {
tmp_5 = t_13;
}
tmp_4 = tmp_5;
} else if (t_16) {
tmp_4 = t_18;
} else if ((fmaxf((t_0 + (t_1 * t_1)), t_11) / t_4) > floorf(maxAniso)) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_13;
}
return tmp_4;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_1 = Float32(dX_46_u * floor(w)) t_2 = Float32(dY_46_v * floor(h)) t_3 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_4 = abs(Float32(t_3 * Float32(floor(w) * floor(h)))) t_5 = Float32(dY_46_u * floor(w)) t_6 = t_5 ^ Float32(2.0) t_7 = floor(w) ^ Float32(2.0) t_8 = Float32(t_7 * dY_46_u) t_9 = floor(h) ^ Float32(2.0) t_10 = fma(Float32(t_7 * dX_46_u), dX_46_u, Float32(Float32(t_9 * dX_46_v) * dX_46_v)) t_11 = fma(t_8, dY_46_u, Float32(Float32(t_9 * dY_46_v) * dY_46_v)) t_12 = fmax(t_10, t_11) t_13 = Float32(t_12 / t_4) t_14 = Float32(sqrt(t_12) / floor(maxAniso)) t_15 = Float32(sqrt(Float32(Float32(1.0) / t_12)) * t_4) tmp = Float32(0.0) if (Float32(fmax(t_10, Float32(t_8 * dY_46_u)) / t_4) > floor(maxAniso)) tmp = t_14; else tmp = t_15; end t_16 = tmp < Float32(1.0) t_17 = t_2 ^ Float32(2.0) tmp_1 = Float32(0.0) if (Float32(fmax(Float32(t_0 + (t_1 ^ Float32(2.0))), Float32(t_17 + t_6)) / Float32(Float32(t_3 * floor(w)) * floor(h))) > floor(maxAniso)) tmp_1 = floor(maxAniso); else tmp_1 = t_13; end tmp_2 = Float32(0.0) if (t_13 > floor(maxAniso)) tmp_2 = t_14; else tmp_2 = t_15; end t_18 = fmax(Float32(1.0), Float32(tmp_1 * tmp_2)) tmp_4 = Float32(0.0) if (dX_46_u <= Float32(0.004999999888241291)) tmp_5 = Float32(0.0) if (t_16) tmp_5 = t_18; elseif (Float32(fmax(t_10, Float32(Float32((t_2 ^ Float32(4.0)) - (t_5 ^ Float32(4.0))) / Float32(t_17 - t_6))) / t_4) > floor(maxAniso)) tmp_5 = floor(maxAniso); else tmp_5 = t_13; end tmp_4 = tmp_5; elseif (t_16) tmp_4 = t_18; elseif (Float32(fmax(Float32(t_0 + Float32(t_1 * t_1)), t_11) / t_4) > floor(maxAniso)) tmp_4 = floor(maxAniso); else tmp_4 = t_13; end return tmp_4 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_2 := dY.v \cdot \left\lfloor h\right\rfloor \\
t_3 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_4 := \left|t\_3 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_5 := dY.u \cdot \left\lfloor w\right\rfloor \\
t_6 := {t\_5}^{2}\\
t_7 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_8 := t\_7 \cdot dY.u\\
t_9 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_10 := \mathsf{fma}\left(t\_7 \cdot dX.u, dX.u, \left(t\_9 \cdot dX.v\right) \cdot dX.v\right)\\
t_11 := \mathsf{fma}\left(t\_8, dY.u, \left(t\_9 \cdot dY.v\right) \cdot dY.v\right)\\
t_12 := \mathsf{max}\left(t\_10, t\_11\right)\\
t_13 := \frac{t\_12}{t\_4}\\
t_14 := \frac{\sqrt{t\_12}}{\left\lfloor maxAniso\right\rfloor }\\
t_15 := \sqrt{\frac{1}{t\_12}} \cdot t\_4\\
t_16 := \begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_10, t\_8 \cdot dY.u\right)}{t\_4} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_14\\
\mathbf{else}:\\
\;\;\;\;t\_15\\
\end{array} < 1\\
t_17 := {t\_2}^{2}\\
t_18 := \mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_0 + {t\_1}^{2}, t\_17 + t\_6\right)}{\left(t\_3 \cdot \left\lfloor w\right\rfloor \right) \cdot \left\lfloor h\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_13\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_13 > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_14\\
\mathbf{else}:\\
\;\;\;\;t\_15\\
\end{array}\right)\\
\mathbf{if}\;dX.u \leq 0.004999999888241291:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;t\_16:\\
\;\;\;\;t\_18\\
\mathbf{elif}\;\frac{\mathsf{max}\left(t\_10, \frac{{t\_2}^{4} - {t\_5}^{4}}{t\_17 - t\_6}\right)}{t\_4} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_13\\
\end{array}\\
\mathbf{elif}\;t\_16:\\
\;\;\;\;t\_18\\
\mathbf{elif}\;\frac{\mathsf{max}\left(t\_0 + t\_1 \cdot t\_1, t\_11\right)}{t\_4} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_13\\
\end{array}
\end{array}
if dX.u < 0.00499999989Initial program 94.8%
Taylor expanded in w around 0
Applied rewrites31.6%
Taylor expanded in dY.u around inf
Applied rewrites45.2%
Applied rewrites43.9%
Applied rewrites43.7%
if 0.00499999989 < dX.u Initial program 95.5%
Taylor expanded in w around 0
Applied rewrites32.1%
Taylor expanded in dY.u around inf
Applied rewrites48.1%
Applied rewrites46.2%
Applied rewrites55.5%
Final simplification47.9%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (* dX.v (floor h)) 2.0))
(t_1 (* dX.u (floor w)))
(t_2 (pow (floor h) 2.0))
(t_3 (pow (floor w) 2.0))
(t_4 (* t_3 dY.u))
(t_5 (fma t_4 dY.u (* (* t_2 dY.v) dY.v)))
(t_6 (fma (* t_3 dX.u) dX.u (* (* t_2 dX.v) dX.v)))
(t_7 (fmax t_6 t_5))
(t_8 (/ (sqrt t_7) (floor maxAniso)))
(t_9 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_10 (fabs (* t_9 (* (floor w) (floor h)))))
(t_11 (/ t_7 t_10))
(t_12 (* (sqrt (/ 1.0 t_7)) t_10)))
(if (<
(if (> (/ (fmax t_6 (* t_4 dY.u)) t_10) (floor maxAniso)) t_8 t_12)
1.0)
(fmax
1.0
(*
(if (>
(/
(fmax
(+ t_0 (pow t_1 2.0))
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(* (* t_9 (floor w)) (floor h)))
(floor maxAniso))
(floor maxAniso)
t_11)
(if (> t_11 (floor maxAniso)) t_8 t_12)))
(if (> (/ (fmax (+ t_0 (* t_1 t_1)) t_5) t_10) (floor maxAniso))
(floor maxAniso)
t_11))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf((dX_46_v * floorf(h)), 2.0f);
float t_1 = dX_46_u * floorf(w);
float t_2 = powf(floorf(h), 2.0f);
float t_3 = powf(floorf(w), 2.0f);
float t_4 = t_3 * dY_46_u;
float t_5 = fmaf(t_4, dY_46_u, ((t_2 * dY_46_v) * dY_46_v));
float t_6 = fmaf((t_3 * dX_46_u), dX_46_u, ((t_2 * dX_46_v) * dX_46_v));
float t_7 = fmaxf(t_6, t_5);
float t_8 = sqrtf(t_7) / floorf(maxAniso);
float t_9 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_10 = fabsf((t_9 * (floorf(w) * floorf(h))));
float t_11 = t_7 / t_10;
float t_12 = sqrtf((1.0f / t_7)) * t_10;
float tmp;
if ((fmaxf(t_6, (t_4 * dY_46_u)) / t_10) > floorf(maxAniso)) {
tmp = t_8;
} else {
tmp = t_12;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if ((fmaxf((t_0 + powf(t_1, 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / ((t_9 * floorf(w)) * floorf(h))) > floorf(maxAniso)) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_11;
}
float tmp_5;
if (t_11 > floorf(maxAniso)) {
tmp_5 = t_8;
} else {
tmp_5 = t_12;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if ((fmaxf((t_0 + (t_1 * t_1)), t_5) / t_10) > floorf(maxAniso)) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_11;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dX_46_v * floor(h)) ^ Float32(2.0) t_1 = Float32(dX_46_u * floor(w)) t_2 = floor(h) ^ Float32(2.0) t_3 = floor(w) ^ Float32(2.0) t_4 = Float32(t_3 * dY_46_u) t_5 = fma(t_4, dY_46_u, Float32(Float32(t_2 * dY_46_v) * dY_46_v)) t_6 = fma(Float32(t_3 * dX_46_u), dX_46_u, Float32(Float32(t_2 * dX_46_v) * dX_46_v)) t_7 = fmax(t_6, t_5) t_8 = Float32(sqrt(t_7) / floor(maxAniso)) t_9 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_10 = abs(Float32(t_9 * Float32(floor(w) * floor(h)))) t_11 = Float32(t_7 / t_10) t_12 = Float32(sqrt(Float32(Float32(1.0) / t_7)) * t_10) tmp = Float32(0.0) if (Float32(fmax(t_6, Float32(t_4 * dY_46_u)) / t_10) > floor(maxAniso)) tmp = t_8; else tmp = t_12; end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (Float32(fmax(Float32(t_0 + (t_1 ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / Float32(Float32(t_9 * floor(w)) * floor(h))) > floor(maxAniso)) tmp_4 = floor(maxAniso); else tmp_4 = t_11; end tmp_5 = Float32(0.0) if (t_11 > floor(maxAniso)) tmp_5 = t_8; else tmp_5 = t_12; end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (Float32(fmax(Float32(t_0 + Float32(t_1 * t_1)), t_5) / t_10) > floor(maxAniso)) tmp_3 = floor(maxAniso); else tmp_3 = t_11; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2}\\
t_1 := dX.u \cdot \left\lfloor w\right\rfloor \\
t_2 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_3 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_4 := t\_3 \cdot dY.u\\
t_5 := \mathsf{fma}\left(t\_4, dY.u, \left(t\_2 \cdot dY.v\right) \cdot dY.v\right)\\
t_6 := \mathsf{fma}\left(t\_3 \cdot dX.u, dX.u, \left(t\_2 \cdot dX.v\right) \cdot dX.v\right)\\
t_7 := \mathsf{max}\left(t\_6, t\_5\right)\\
t_8 := \frac{\sqrt{t\_7}}{\left\lfloor maxAniso\right\rfloor }\\
t_9 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_10 := \left|t\_9 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_11 := \frac{t\_7}{t\_10}\\
t_12 := \sqrt{\frac{1}{t\_7}} \cdot t\_10\\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_6, t\_4 \cdot dY.u\right)}{t\_10} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_8\\
\mathbf{else}:\\
\;\;\;\;t\_12\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_0 + {t\_1}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left(t\_9 \cdot \left\lfloor w\right\rfloor \right) \cdot \left\lfloor h\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_11\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_11 > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_8\\
\mathbf{else}:\\
\;\;\;\;t\_12\\
\end{array}\right)\\
\mathbf{elif}\;\frac{\mathsf{max}\left(t\_0 + t\_1 \cdot t\_1, t\_5\right)}{t\_10} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_11\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites32.1%
Taylor expanded in dY.u around inf
Applied rewrites44.9%
Applied rewrites43.7%
Applied rewrites52.3%
Final simplification51.4%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (* dY.u (floor w)) 2.0))
(t_1 (pow (floor h) 2.0))
(t_2 (pow (floor w) 2.0))
(t_3 (* t_2 dY.u))
(t_4 (fma (* t_2 dX.u) dX.u (* (* t_1 dX.v) dX.v)))
(t_5 (fmax t_4 (fma t_3 dY.u (* (* t_1 dY.v) dY.v))))
(t_6 (/ (sqrt t_5) (floor maxAniso)))
(t_7 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_8 (fabs (* t_7 (* (floor w) (floor h)))))
(t_9 (/ t_5 t_8))
(t_10 (> t_9 (floor maxAniso))))
(if (<
(if (> (/ (fmax t_4 (* t_3 dY.u)) t_8) (floor maxAniso))
t_6
(* (sqrt (/ 1.0 (fmax t_4 (fma t_1 (* dY.v dY.v) t_0)))) t_8))
1.0)
(fmax
1.0
(*
(if (>
(/
(fmax
(+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0))
(+ (pow (* dY.v (floor h)) 2.0) t_0))
(* (* t_7 (floor w)) (floor h)))
(floor maxAniso))
(floor maxAniso)
t_9)
(if t_10 t_6 (* (sqrt (/ 1.0 t_5)) t_8))))
(if t_10 (floor maxAniso) t_9))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf((dY_46_u * floorf(w)), 2.0f);
float t_1 = powf(floorf(h), 2.0f);
float t_2 = powf(floorf(w), 2.0f);
float t_3 = t_2 * dY_46_u;
float t_4 = fmaf((t_2 * dX_46_u), dX_46_u, ((t_1 * dX_46_v) * dX_46_v));
float t_5 = fmaxf(t_4, fmaf(t_3, dY_46_u, ((t_1 * dY_46_v) * dY_46_v)));
float t_6 = sqrtf(t_5) / floorf(maxAniso);
float t_7 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_8 = fabsf((t_7 * (floorf(w) * floorf(h))));
float t_9 = t_5 / t_8;
int t_10 = t_9 > floorf(maxAniso);
float tmp;
if ((fmaxf(t_4, (t_3 * dY_46_u)) / t_8) > floorf(maxAniso)) {
tmp = t_6;
} else {
tmp = sqrtf((1.0f / fmaxf(t_4, fmaf(t_1, (dY_46_v * dY_46_v), t_0)))) * t_8;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if ((fmaxf((powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f)), (powf((dY_46_v * floorf(h)), 2.0f) + t_0)) / ((t_7 * floorf(w)) * floorf(h))) > floorf(maxAniso)) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_9;
}
float tmp_5;
if (t_10) {
tmp_5 = t_6;
} else {
tmp_5 = sqrtf((1.0f / t_5)) * t_8;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if (t_10) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_9;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = Float32(dY_46_u * floor(w)) ^ Float32(2.0) t_1 = floor(h) ^ Float32(2.0) t_2 = floor(w) ^ Float32(2.0) t_3 = Float32(t_2 * dY_46_u) t_4 = fma(Float32(t_2 * dX_46_u), dX_46_u, Float32(Float32(t_1 * dX_46_v) * dX_46_v)) t_5 = fmax(t_4, fma(t_3, dY_46_u, Float32(Float32(t_1 * dY_46_v) * dY_46_v))) t_6 = Float32(sqrt(t_5) / floor(maxAniso)) t_7 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_8 = abs(Float32(t_7 * Float32(floor(w) * floor(h)))) t_9 = Float32(t_5 / t_8) t_10 = t_9 > floor(maxAniso) tmp = Float32(0.0) if (Float32(fmax(t_4, Float32(t_3 * dY_46_u)) / t_8) > floor(maxAniso)) tmp = t_6; else tmp = Float32(sqrt(Float32(Float32(1.0) / fmax(t_4, fma(t_1, Float32(dY_46_v * dY_46_v), t_0)))) * t_8); end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (Float32(fmax(Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))), Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + t_0)) / Float32(Float32(t_7 * floor(w)) * floor(h))) > floor(maxAniso)) tmp_4 = floor(maxAniso); else tmp_4 = t_9; end tmp_5 = Float32(0.0) if (t_10) tmp_5 = t_6; else tmp_5 = Float32(sqrt(Float32(Float32(1.0) / t_5)) * t_8); end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (t_10) tmp_3 = floor(maxAniso); else tmp_3 = t_9; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\\
t_1 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_2 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_3 := t\_2 \cdot dY.u\\
t_4 := \mathsf{fma}\left(t\_2 \cdot dX.u, dX.u, \left(t\_1 \cdot dX.v\right) \cdot dX.v\right)\\
t_5 := \mathsf{max}\left(t\_4, \mathsf{fma}\left(t\_3, dY.u, \left(t\_1 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_6 := \frac{\sqrt{t\_5}}{\left\lfloor maxAniso\right\rfloor }\\
t_7 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_8 := \left|t\_7 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_9 := \frac{t\_5}{t\_8}\\
t_10 := t\_9 > \left\lfloor maxAniso\right\rfloor \\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_4, t\_3 \cdot dY.u\right)}{t\_8} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_6\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1}{\mathsf{max}\left(t\_4, \mathsf{fma}\left(t\_1, dY.v \cdot dY.v, t\_0\right)\right)}} \cdot t\_8\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left({\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + t\_0\right)}{\left(t\_7 \cdot \left\lfloor w\right\rfloor \right) \cdot \left\lfloor h\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_10:\\
\;\;\;\;t\_6\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1}{t\_5}} \cdot t\_8\\
\end{array}\right)\\
\mathbf{elif}\;t\_10:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_9\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites31.1%
Taylor expanded in dY.u around inf
Applied rewrites46.8%
Applied rewrites43.4%
Applied rewrites50.7%
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:precision binary32
(let* ((t_0 (pow (floor w) 2.0))
(t_1 (* t_0 dY.u))
(t_2 (fma dY.u dX.v (* (- dY.v) dX.u)))
(t_3 (+ (pow (* dX.v (floor h)) 2.0) (pow (* dX.u (floor w)) 2.0)))
(t_4 (fabs (* t_2 (* (floor w) (floor h)))))
(t_5 (pow (floor h) 2.0))
(t_6
(fmax
(fma (* t_0 dX.u) dX.u (* (* t_5 dX.v) dX.v))
(fma t_1 dY.u (* (* t_5 dY.v) dY.v))))
(t_7 (* (sqrt (/ 1.0 t_6)) t_4))
(t_8 (/ t_6 t_4))
(t_9 (> t_8 (floor maxAniso)))
(t_10 (/ (sqrt t_6) (floor maxAniso))))
(if (<
(if (> (/ (fmax t_3 (* t_1 dY.u)) t_4) (floor maxAniso)) t_10 t_7)
1.0)
(fmax
1.0
(*
(if (>
(/
(fmax
t_3
(+ (pow (* dY.v (floor h)) 2.0) (pow (* dY.u (floor w)) 2.0)))
(* (* t_2 (floor w)) (floor h)))
(floor maxAniso))
(floor maxAniso)
t_8)
(if t_9 t_10 t_7)))
(if t_9 (floor maxAniso) t_8))))
float code(float w, float h, float dX_46_u, float dX_46_v, float dY_46_u, float dY_46_v, float maxAniso) {
float t_0 = powf(floorf(w), 2.0f);
float t_1 = t_0 * dY_46_u;
float t_2 = fmaf(dY_46_u, dX_46_v, (-dY_46_v * dX_46_u));
float t_3 = powf((dX_46_v * floorf(h)), 2.0f) + powf((dX_46_u * floorf(w)), 2.0f);
float t_4 = fabsf((t_2 * (floorf(w) * floorf(h))));
float t_5 = powf(floorf(h), 2.0f);
float t_6 = fmaxf(fmaf((t_0 * dX_46_u), dX_46_u, ((t_5 * dX_46_v) * dX_46_v)), fmaf(t_1, dY_46_u, ((t_5 * dY_46_v) * dY_46_v)));
float t_7 = sqrtf((1.0f / t_6)) * t_4;
float t_8 = t_6 / t_4;
int t_9 = t_8 > floorf(maxAniso);
float t_10 = sqrtf(t_6) / floorf(maxAniso);
float tmp;
if ((fmaxf(t_3, (t_1 * dY_46_u)) / t_4) > floorf(maxAniso)) {
tmp = t_10;
} else {
tmp = t_7;
}
float tmp_3;
if (tmp < 1.0f) {
float tmp_4;
if ((fmaxf(t_3, (powf((dY_46_v * floorf(h)), 2.0f) + powf((dY_46_u * floorf(w)), 2.0f))) / ((t_2 * floorf(w)) * floorf(h))) > floorf(maxAniso)) {
tmp_4 = floorf(maxAniso);
} else {
tmp_4 = t_8;
}
float tmp_5;
if (t_9) {
tmp_5 = t_10;
} else {
tmp_5 = t_7;
}
tmp_3 = fmaxf(1.0f, (tmp_4 * tmp_5));
} else if (t_9) {
tmp_3 = floorf(maxAniso);
} else {
tmp_3 = t_8;
}
return tmp_3;
}
function code(w, h, dX_46_u, dX_46_v, dY_46_u, dY_46_v, maxAniso) t_0 = floor(w) ^ Float32(2.0) t_1 = Float32(t_0 * dY_46_u) t_2 = fma(dY_46_u, dX_46_v, Float32(Float32(-dY_46_v) * dX_46_u)) t_3 = Float32((Float32(dX_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dX_46_u * floor(w)) ^ Float32(2.0))) t_4 = abs(Float32(t_2 * Float32(floor(w) * floor(h)))) t_5 = floor(h) ^ Float32(2.0) t_6 = fmax(fma(Float32(t_0 * dX_46_u), dX_46_u, Float32(Float32(t_5 * dX_46_v) * dX_46_v)), fma(t_1, dY_46_u, Float32(Float32(t_5 * dY_46_v) * dY_46_v))) t_7 = Float32(sqrt(Float32(Float32(1.0) / t_6)) * t_4) t_8 = Float32(t_6 / t_4) t_9 = t_8 > floor(maxAniso) t_10 = Float32(sqrt(t_6) / floor(maxAniso)) tmp = Float32(0.0) if (Float32(fmax(t_3, Float32(t_1 * dY_46_u)) / t_4) > floor(maxAniso)) tmp = t_10; else tmp = t_7; end tmp_3 = Float32(0.0) if (tmp < Float32(1.0)) tmp_4 = Float32(0.0) if (Float32(fmax(t_3, Float32((Float32(dY_46_v * floor(h)) ^ Float32(2.0)) + (Float32(dY_46_u * floor(w)) ^ Float32(2.0)))) / Float32(Float32(t_2 * floor(w)) * floor(h))) > floor(maxAniso)) tmp_4 = floor(maxAniso); else tmp_4 = t_8; end tmp_5 = Float32(0.0) if (t_9) tmp_5 = t_10; else tmp_5 = t_7; end tmp_3 = fmax(Float32(1.0), Float32(tmp_4 * tmp_5)); elseif (t_9) tmp_3 = floor(maxAniso); else tmp_3 = t_8; end return tmp_3 end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\left\lfloor w\right\rfloor \right)}^{2}\\
t_1 := t\_0 \cdot dY.u\\
t_2 := \mathsf{fma}\left(dY.u, dX.v, \left(-dY.v\right) \cdot dX.u\right)\\
t_3 := {\left(dX.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dX.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\\
t_4 := \left|t\_2 \cdot \left(\left\lfloor w\right\rfloor \cdot \left\lfloor h\right\rfloor \right)\right|\\
t_5 := {\left(\left\lfloor h\right\rfloor \right)}^{2}\\
t_6 := \mathsf{max}\left(\mathsf{fma}\left(t\_0 \cdot dX.u, dX.u, \left(t\_5 \cdot dX.v\right) \cdot dX.v\right), \mathsf{fma}\left(t\_1, dY.u, \left(t\_5 \cdot dY.v\right) \cdot dY.v\right)\right)\\
t_7 := \sqrt{\frac{1}{t\_6}} \cdot t\_4\\
t_8 := \frac{t\_6}{t\_4}\\
t_9 := t\_8 > \left\lfloor maxAniso\right\rfloor \\
t_10 := \frac{\sqrt{t\_6}}{\left\lfloor maxAniso\right\rfloor }\\
\mathbf{if}\;\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_3, t\_1 \cdot dY.u\right)}{t\_4} > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;t\_10\\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array} < 1:\\
\;\;\;\;\mathsf{max}\left(1, \begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(t\_3, {\left(dY.v \cdot \left\lfloor h\right\rfloor \right)}^{2} + {\left(dY.u \cdot \left\lfloor w\right\rfloor \right)}^{2}\right)}{\left(t\_2 \cdot \left\lfloor w\right\rfloor \right) \cdot \left\lfloor h\right\rfloor } > \left\lfloor maxAniso\right\rfloor :\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array} \cdot \begin{array}{l}
\mathbf{if}\;t\_9:\\
\;\;\;\;t\_10\\
\mathbf{else}:\\
\;\;\;\;t\_7\\
\end{array}\right)\\
\mathbf{elif}\;t\_9:\\
\;\;\;\;\left\lfloor maxAniso\right\rfloor \\
\mathbf{else}:\\
\;\;\;\;t\_8\\
\end{array}
\end{array}
Initial program 95.0%
Taylor expanded in w around 0
Applied rewrites31.1%
Taylor expanded in dY.u around inf
Applied rewrites45.9%
Applied rewrites44.1%
Applied rewrites33.9%
herbie shell --seed 2024346
(FPCore (w h dX.u dX.v dY.u dY.v maxAniso)
:name "Anisotropic x16 LOD (ratio of anisotropy)"
:precision binary32
:pre (and (and (and (and (and (and (and (<= 1.0 w) (<= w 16384.0)) (and (<= 1.0 h) (<= h 16384.0))) (and (<= 1e-20 (fabs dX.u)) (<= (fabs dX.u) 1e+20))) (and (<= 1e-20 (fabs dX.v)) (<= (fabs dX.v) 1e+20))) (and (<= 1e-20 (fabs dY.u)) (<= (fabs dY.u) 1e+20))) (and (<= 1e-20 (fabs dY.v)) (<= (fabs dY.v) 1e+20))) (== maxAniso 16.0))
(if (< (if (> (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u))))) (floor maxAniso)) (/ (sqrt (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v))))) (floor maxAniso)) (/ (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u)))) (sqrt (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v))))))) 1.0) (fmax 1.0 (* (if (> (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u))))) (floor maxAniso)) (floor maxAniso) (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u)))))) (if (> (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u))))) (floor maxAniso)) (/ (sqrt (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v))))) (floor maxAniso)) (/ (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u)))) (sqrt (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v))))))))) (if (> (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u))))) (floor maxAniso)) (floor maxAniso) (/ (fmax (+ (* (* (floor w) dX.u) (* (floor w) dX.u)) (* (* (floor h) dX.v) (* (floor h) dX.v))) (+ (* (* (floor w) dY.u) (* (floor w) dY.u)) (* (* (floor h) dY.v) (* (floor h) dY.v)))) (fabs (- (* (* (floor w) dX.u) (* (floor h) dY.v)) (* (* (floor h) dX.v) (* (floor w) dY.u))))))))