Trowbridge-Reitz Sample, near normal, slope_y

Percentage Accurate: 98.3% → 98.3%
Time: 15.1s
Alternatives: 21
Speedup: 1.0×

Specification

?
\[\left(\left(cosTheta\_i > 0.9999 \land cosTheta\_i \leq 1\right) \land \left(2.328306437 \cdot 10^{-10} \leq u1 \land u1 \leq 1\right)\right) \land \left(2.328306437 \cdot 10^{-10} \leq u2 \land u2 \leq 1\right)\]
\[\begin{array}{l} \\ \sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \end{array} \]
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (* (sqrt (/ u1 (- 1.0 u1))) (sin (* 6.28318530718 u2))))
float code(float cosTheta_i, float u1, float u2) {
	return sqrtf((u1 / (1.0f - u1))) * sinf((6.28318530718f * u2));
}
real(4) function code(costheta_i, u1, u2)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: u1
    real(4), intent (in) :: u2
    code = sqrt((u1 / (1.0e0 - u1))) * sin((6.28318530718e0 * u2))
end function
function code(cosTheta_i, u1, u2)
	return Float32(sqrt(Float32(u1 / Float32(Float32(1.0) - u1))) * sin(Float32(Float32(6.28318530718) * u2)))
end
function tmp = code(cosTheta_i, u1, u2)
	tmp = sqrt((u1 / (single(1.0) - u1))) * sin((single(6.28318530718) * u2));
end
\begin{array}{l}

\\
\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right)
\end{array}

Sampling outcomes in binary32 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 21 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 98.3% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \end{array} \]
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (* (sqrt (/ u1 (- 1.0 u1))) (sin (* 6.28318530718 u2))))
float code(float cosTheta_i, float u1, float u2) {
	return sqrtf((u1 / (1.0f - u1))) * sinf((6.28318530718f * u2));
}
real(4) function code(costheta_i, u1, u2)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: u1
    real(4), intent (in) :: u2
    code = sqrt((u1 / (1.0e0 - u1))) * sin((6.28318530718e0 * u2))
end function
function code(cosTheta_i, u1, u2)
	return Float32(sqrt(Float32(u1 / Float32(Float32(1.0) - u1))) * sin(Float32(Float32(6.28318530718) * u2)))
end
function tmp = code(cosTheta_i, u1, u2)
	tmp = sqrt((u1 / (single(1.0) - u1))) * sin((single(6.28318530718) * u2));
end
\begin{array}{l}

\\
\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right)
\end{array}

Alternative 1: 98.3% accurate, 0.8× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{1 - u1}{u1}\\ \sin \left(u2 \cdot 6.28318530718\right) \cdot \sqrt{\frac{\left(1 - u1\right) - t\_0 \cdot 0}{t\_0 \cdot \left(1 - u1\right)}} \end{array} \end{array} \]
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (let* ((t_0 (/ (- 1.0 u1) u1)))
   (*
    (sin (* u2 6.28318530718))
    (sqrt (/ (- (- 1.0 u1) (* t_0 0.0)) (* t_0 (- 1.0 u1)))))))
float code(float cosTheta_i, float u1, float u2) {
	float t_0 = (1.0f - u1) / u1;
	return sinf((u2 * 6.28318530718f)) * sqrtf((((1.0f - u1) - (t_0 * 0.0f)) / (t_0 * (1.0f - u1))));
}
real(4) function code(costheta_i, u1, u2)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: u1
    real(4), intent (in) :: u2
    real(4) :: t_0
    t_0 = (1.0e0 - u1) / u1
    code = sin((u2 * 6.28318530718e0)) * sqrt((((1.0e0 - u1) - (t_0 * 0.0e0)) / (t_0 * (1.0e0 - u1))))
end function
function code(cosTheta_i, u1, u2)
	t_0 = Float32(Float32(Float32(1.0) - u1) / u1)
	return Float32(sin(Float32(u2 * Float32(6.28318530718))) * sqrt(Float32(Float32(Float32(Float32(1.0) - u1) - Float32(t_0 * Float32(0.0))) / Float32(t_0 * Float32(Float32(1.0) - u1)))))
end
function tmp = code(cosTheta_i, u1, u2)
	t_0 = (single(1.0) - u1) / u1;
	tmp = sin((u2 * single(6.28318530718))) * sqrt((((single(1.0) - u1) - (t_0 * single(0.0))) / (t_0 * (single(1.0) - u1))));
end
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \frac{1 - u1}{u1}\\
\sin \left(u2 \cdot 6.28318530718\right) \cdot \sqrt{\frac{\left(1 - u1\right) - t\_0 \cdot 0}{t\_0 \cdot \left(1 - u1\right)}}
\end{array}
\end{array}
Derivation
  1. Initial program 98.5%

    \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
  2. Add Preprocessing
  3. Applied rewrites98.6%

    \[\leadsto \sqrt{\color{blue}{\frac{0 \cdot \frac{u1 - 1}{u1} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
  4. Final simplification98.6%

    \[\leadsto \sin \left(u2 \cdot 6.28318530718\right) \cdot \sqrt{\frac{\left(1 - u1\right) - \frac{1 - u1}{u1} \cdot 0}{\frac{1 - u1}{u1} \cdot \left(1 - u1\right)}} \]
  5. Add Preprocessing

Alternative 2: 97.2% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.25:\\ \;\;\;\;\left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\ \end{array} \end{array} \]
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (if (<= (* u2 6.28318530718) 0.25)
   (*
    (*
     (fma
      u2
      (fma (* (* u2 u2) u2) 81.6052492761019 (* -41.341702240407926 u2))
      6.28318530718)
     u2)
    (sqrt (/ u1 (- 1.0 u1))))
   (* (sqrt (fma (fma u1 u1 u1) u1 u1)) (sin (* u2 6.28318530718)))))
float code(float cosTheta_i, float u1, float u2) {
	float tmp;
	if ((u2 * 6.28318530718f) <= 0.25f) {
		tmp = (fmaf(u2, fmaf(((u2 * u2) * u2), 81.6052492761019f, (-41.341702240407926f * u2)), 6.28318530718f) * u2) * sqrtf((u1 / (1.0f - u1)));
	} else {
		tmp = sqrtf(fmaf(fmaf(u1, u1, u1), u1, u1)) * sinf((u2 * 6.28318530718f));
	}
	return tmp;
}
function code(cosTheta_i, u1, u2)
	tmp = Float32(0.0)
	if (Float32(u2 * Float32(6.28318530718)) <= Float32(0.25))
		tmp = Float32(Float32(fma(u2, fma(Float32(Float32(u2 * u2) * u2), Float32(81.6052492761019), Float32(Float32(-41.341702240407926) * u2)), Float32(6.28318530718)) * u2) * sqrt(Float32(u1 / Float32(Float32(1.0) - u1))));
	else
		tmp = Float32(sqrt(fma(fma(u1, u1, u1), u1, u1)) * sin(Float32(u2 * Float32(6.28318530718))));
	end
	return tmp
end
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.25:\\
\;\;\;\;\left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f32 #s(literal 314159265359/50000000000 binary32) u2) < 0.25

    1. Initial program 98.5%

      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    2. Add Preprocessing
    3. Taylor expanded in u2 around 0

      \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
    4. Applied rewrites98.4%

      \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
    5. Step-by-step derivation
      1. Applied rewrites98.6%

        \[\leadsto \color{blue}{\left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}} \]

      if 0.25 < (*.f32 #s(literal 314159265359/50000000000 binary32) u2)

      1. Initial program 98.1%

        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      2. Add Preprocessing
      3. Taylor expanded in u1 around 0

        \[\leadsto \sqrt{\color{blue}{u1 \cdot \left(1 + u1 \cdot \left(1 + u1\right)\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      4. Step-by-step derivation
        1. +-commutativeN/A

          \[\leadsto \sqrt{u1 \cdot \color{blue}{\left(u1 \cdot \left(1 + u1\right) + 1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        2. distribute-rgt-inN/A

          \[\leadsto \sqrt{\color{blue}{\left(u1 \cdot \left(1 + u1\right)\right) \cdot u1 + 1 \cdot u1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        3. *-lft-identityN/A

          \[\leadsto \sqrt{\left(u1 \cdot \left(1 + u1\right)\right) \cdot u1 + \color{blue}{u1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        4. lower-fma.f32N/A

          \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(u1 \cdot \left(1 + u1\right), u1, u1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        5. +-commutativeN/A

          \[\leadsto \sqrt{\mathsf{fma}\left(u1 \cdot \color{blue}{\left(u1 + 1\right)}, u1, u1\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        6. distribute-lft-inN/A

          \[\leadsto \sqrt{\mathsf{fma}\left(\color{blue}{u1 \cdot u1 + u1 \cdot 1}, u1, u1\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        7. *-rgt-identityN/A

          \[\leadsto \sqrt{\mathsf{fma}\left(u1 \cdot u1 + \color{blue}{u1}, u1, u1\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        8. lower-fma.f3297.2

          \[\leadsto \sqrt{\mathsf{fma}\left(\color{blue}{\mathsf{fma}\left(u1, u1, u1\right)}, u1, u1\right)} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      5. Applied rewrites97.2%

        \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    6. Recombined 2 regimes into one program.
    7. Final simplification98.4%

      \[\leadsto \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.25:\\ \;\;\;\;\left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\ \end{array} \]
    8. Add Preprocessing

    Alternative 3: 97.3% accurate, 1.0× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} t_0 := \sqrt{\frac{u1}{1 - u1}}\\ \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.800000011920929:\\ \;\;\;\;\mathsf{fma}\left(t\_0, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\ \end{array} \end{array} \]
    (FPCore (cosTheta_i u1 u2)
     :precision binary32
     (let* ((t_0 (sqrt (/ u1 (- 1.0 u1)))))
       (if (<= (* u2 6.28318530718) 0.800000011920929)
         (*
          (fma
           t_0
           (fma -41.341702240407926 (* u2 u2) 6.28318530718)
           (*
            (*
             (* (fma (* u2 u2) -76.70585975309672 81.6052492761019) t_0)
             (* u2 u2))
            (* u2 u2)))
          u2)
         (* (sqrt (fma u1 u1 u1)) (sin (* u2 6.28318530718))))))
    float code(float cosTheta_i, float u1, float u2) {
    	float t_0 = sqrtf((u1 / (1.0f - u1)));
    	float tmp;
    	if ((u2 * 6.28318530718f) <= 0.800000011920929f) {
    		tmp = fmaf(t_0, fmaf(-41.341702240407926f, (u2 * u2), 6.28318530718f), (((fmaf((u2 * u2), -76.70585975309672f, 81.6052492761019f) * t_0) * (u2 * u2)) * (u2 * u2))) * u2;
    	} else {
    		tmp = sqrtf(fmaf(u1, u1, u1)) * sinf((u2 * 6.28318530718f));
    	}
    	return tmp;
    }
    
    function code(cosTheta_i, u1, u2)
    	t_0 = sqrt(Float32(u1 / Float32(Float32(1.0) - u1)))
    	tmp = Float32(0.0)
    	if (Float32(u2 * Float32(6.28318530718)) <= Float32(0.800000011920929))
    		tmp = Float32(fma(t_0, fma(Float32(-41.341702240407926), Float32(u2 * u2), Float32(6.28318530718)), Float32(Float32(Float32(fma(Float32(u2 * u2), Float32(-76.70585975309672), Float32(81.6052492761019)) * t_0) * Float32(u2 * u2)) * Float32(u2 * u2))) * u2);
    	else
    		tmp = Float32(sqrt(fma(u1, u1, u1)) * sin(Float32(u2 * Float32(6.28318530718))));
    	end
    	return tmp
    end
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    t_0 := \sqrt{\frac{u1}{1 - u1}}\\
    \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.800000011920929:\\
    \;\;\;\;\mathsf{fma}\left(t\_0, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2\\
    
    \mathbf{else}:\\
    \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if (*.f32 #s(literal 314159265359/50000000000 binary32) u2) < 0.800000012

      1. Initial program 98.5%

        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-sqrt.f32N/A

          \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        2. rem-square-sqrtN/A

          \[\leadsto \sqrt{\color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \sqrt{\frac{u1}{1 - u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        3. lift-sqrt.f32N/A

          \[\leadsto \sqrt{\color{blue}{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\frac{u1}{1 - u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        4. lift-sqrt.f32N/A

          \[\leadsto \sqrt{\sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\sqrt{\frac{u1}{1 - u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        5. sqrt-prodN/A

          \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        6. lower-*.f32N/A

          \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        7. lower-sqrt.f32N/A

          \[\leadsto \left(\color{blue}{\sqrt{\sqrt{\frac{u1}{1 - u1}}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right) \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        8. lower-sqrt.f3298.0

          \[\leadsto \left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \color{blue}{\sqrt{\sqrt{\frac{u1}{1 - u1}}}}\right) \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      4. Applied rewrites98.0%

        \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      5. Taylor expanded in u2 around 0

        \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-302029322777818351566783844332719832329455959975176141755859165754785028165295919}{3937500000000000000000000000000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)\right)\right)} \]
      6. Applied rewrites98.4%

        \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt{\frac{u1}{1 - u1}}, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2} \]

      if 0.800000012 < (*.f32 #s(literal 314159265359/50000000000 binary32) u2)

      1. Initial program 97.9%

        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      2. Add Preprocessing
      3. Taylor expanded in u1 around 0

        \[\leadsto \sqrt{\color{blue}{u1 \cdot \left(1 + u1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      4. Step-by-step derivation
        1. +-commutativeN/A

          \[\leadsto \sqrt{u1 \cdot \color{blue}{\left(u1 + 1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        2. distribute-lft-inN/A

          \[\leadsto \sqrt{\color{blue}{u1 \cdot u1 + u1 \cdot 1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        3. *-rgt-identityN/A

          \[\leadsto \sqrt{u1 \cdot u1 + \color{blue}{u1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
        4. lower-fma.f3294.1

          \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(u1, u1, u1\right)}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      5. Applied rewrites94.1%

        \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(u1, u1, u1\right)}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    3. Recombined 2 regimes into one program.
    4. Final simplification97.9%

      \[\leadsto \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.800000011920929:\\ \;\;\;\;\mathsf{fma}\left(\sqrt{\frac{u1}{1 - u1}}, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \sin \left(u2 \cdot 6.28318530718\right)\\ \end{array} \]
    5. Add Preprocessing

    Alternative 4: 98.3% accurate, 1.0× speedup?

    \[\begin{array}{l} \\ \sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(u2 \cdot 6.28318530718\right) \end{array} \]
    (FPCore (cosTheta_i u1 u2)
     :precision binary32
     (* (sqrt (/ u1 (- 1.0 u1))) (sin (* u2 6.28318530718))))
    float code(float cosTheta_i, float u1, float u2) {
    	return sqrtf((u1 / (1.0f - u1))) * sinf((u2 * 6.28318530718f));
    }
    
    real(4) function code(costheta_i, u1, u2)
        real(4), intent (in) :: costheta_i
        real(4), intent (in) :: u1
        real(4), intent (in) :: u2
        code = sqrt((u1 / (1.0e0 - u1))) * sin((u2 * 6.28318530718e0))
    end function
    
    function code(cosTheta_i, u1, u2)
    	return Float32(sqrt(Float32(u1 / Float32(Float32(1.0) - u1))) * sin(Float32(u2 * Float32(6.28318530718))))
    end
    
    function tmp = code(cosTheta_i, u1, u2)
    	tmp = sqrt((u1 / (single(1.0) - u1))) * sin((u2 * single(6.28318530718)));
    end
    
    \begin{array}{l}
    
    \\
    \sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(u2 \cdot 6.28318530718\right)
    \end{array}
    
    Derivation
    1. Initial program 98.5%

      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    2. Add Preprocessing
    3. Final simplification98.5%

      \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(u2 \cdot 6.28318530718\right) \]
    4. Add Preprocessing

    Alternative 5: 93.9% accurate, 1.3× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} t_0 := \sqrt{\frac{u1}{1 - u1}}\\ \mathsf{fma}\left(t\_0, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2 \end{array} \end{array} \]
    (FPCore (cosTheta_i u1 u2)
     :precision binary32
     (let* ((t_0 (sqrt (/ u1 (- 1.0 u1)))))
       (*
        (fma
         t_0
         (fma -41.341702240407926 (* u2 u2) 6.28318530718)
         (*
          (* (* (fma (* u2 u2) -76.70585975309672 81.6052492761019) t_0) (* u2 u2))
          (* u2 u2)))
        u2)))
    float code(float cosTheta_i, float u1, float u2) {
    	float t_0 = sqrtf((u1 / (1.0f - u1)));
    	return fmaf(t_0, fmaf(-41.341702240407926f, (u2 * u2), 6.28318530718f), (((fmaf((u2 * u2), -76.70585975309672f, 81.6052492761019f) * t_0) * (u2 * u2)) * (u2 * u2))) * u2;
    }
    
    function code(cosTheta_i, u1, u2)
    	t_0 = sqrt(Float32(u1 / Float32(Float32(1.0) - u1)))
    	return Float32(fma(t_0, fma(Float32(-41.341702240407926), Float32(u2 * u2), Float32(6.28318530718)), Float32(Float32(Float32(fma(Float32(u2 * u2), Float32(-76.70585975309672), Float32(81.6052492761019)) * t_0) * Float32(u2 * u2)) * Float32(u2 * u2))) * u2)
    end
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    t_0 := \sqrt{\frac{u1}{1 - u1}}\\
    \mathsf{fma}\left(t\_0, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2
    \end{array}
    \end{array}
    
    Derivation
    1. Initial program 98.5%

      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-sqrt.f32N/A

        \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      2. rem-square-sqrtN/A

        \[\leadsto \sqrt{\color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \sqrt{\frac{u1}{1 - u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      3. lift-sqrt.f32N/A

        \[\leadsto \sqrt{\color{blue}{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\frac{u1}{1 - u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      4. lift-sqrt.f32N/A

        \[\leadsto \sqrt{\sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\sqrt{\frac{u1}{1 - u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      5. sqrt-prodN/A

        \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      6. lower-*.f32N/A

        \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      7. lower-sqrt.f32N/A

        \[\leadsto \left(\color{blue}{\sqrt{\sqrt{\frac{u1}{1 - u1}}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right) \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
      8. lower-sqrt.f3297.9

        \[\leadsto \left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \color{blue}{\sqrt{\sqrt{\frac{u1}{1 - u1}}}}\right) \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    4. Applied rewrites97.9%

      \[\leadsto \color{blue}{\left(\sqrt{\sqrt{\frac{u1}{1 - u1}}} \cdot \sqrt{\sqrt{\frac{u1}{1 - u1}}}\right)} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    5. Taylor expanded in u2 around 0

      \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-302029322777818351566783844332719832329455959975176141755859165754785028165295919}{3937500000000000000000000000000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)\right)\right)} \]
    6. Applied rewrites94.2%

      \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt{\frac{u1}{1 - u1}}, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2} \]
    7. Final simplification94.2%

      \[\leadsto \mathsf{fma}\left(\sqrt{\frac{u1}{1 - u1}}, \mathsf{fma}\left(-41.341702240407926, u2 \cdot u2, 6.28318530718\right), \left(\left(\mathsf{fma}\left(u2 \cdot u2, -76.70585975309672, 81.6052492761019\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \left(u2 \cdot u2\right)\right) \cdot \left(u2 \cdot u2\right)\right) \cdot u2 \]
    8. Add Preprocessing

    Alternative 6: 93.9% accurate, 1.3× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} t_0 := \sqrt{\frac{u1}{1 - u1}}\\ \mathsf{fma}\left(\left(\mathsf{fma}\left(-76.70585975309672, u2 \cdot u2, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right), u2 \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot t\_0\right) \cdot u2 \end{array} \end{array} \]
    (FPCore (cosTheta_i u1 u2)
     :precision binary32
     (let* ((t_0 (sqrt (/ u1 (- 1.0 u1)))))
       (*
        (fma
         (* (* (fma -76.70585975309672 (* u2 u2) 81.6052492761019) t_0) (* u2 u2))
         (* u2 u2)
         (* (fma (* -41.341702240407926 u2) u2 6.28318530718) t_0))
        u2)))
    float code(float cosTheta_i, float u1, float u2) {
    	float t_0 = sqrtf((u1 / (1.0f - u1)));
    	return fmaf(((fmaf(-76.70585975309672f, (u2 * u2), 81.6052492761019f) * t_0) * (u2 * u2)), (u2 * u2), (fmaf((-41.341702240407926f * u2), u2, 6.28318530718f) * t_0)) * u2;
    }
    
    function code(cosTheta_i, u1, u2)
    	t_0 = sqrt(Float32(u1 / Float32(Float32(1.0) - u1)))
    	return Float32(fma(Float32(Float32(fma(Float32(-76.70585975309672), Float32(u2 * u2), Float32(81.6052492761019)) * t_0) * Float32(u2 * u2)), Float32(u2 * u2), Float32(fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718)) * t_0)) * u2)
    end
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    t_0 := \sqrt{\frac{u1}{1 - u1}}\\
    \mathsf{fma}\left(\left(\mathsf{fma}\left(-76.70585975309672, u2 \cdot u2, 81.6052492761019\right) \cdot t\_0\right) \cdot \left(u2 \cdot u2\right), u2 \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot t\_0\right) \cdot u2
    \end{array}
    \end{array}
    
    Derivation
    1. Initial program 98.5%

      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
    2. Add Preprocessing
    3. Taylor expanded in u2 around 0

      \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-302029322777818351566783844332719832329455959975176141755859165754785028165295919}{3937500000000000000000000000000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)\right)\right)} \]
    4. Applied rewrites94.2%

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-76.70585975309672, u2 \cdot u2, 81.6052492761019\right)\right) \cdot \left(u2 \cdot u2\right), u2 \cdot u2, \sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
    5. Final simplification94.2%

      \[\leadsto \mathsf{fma}\left(\left(\mathsf{fma}\left(-76.70585975309672, u2 \cdot u2, 81.6052492761019\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \left(u2 \cdot u2\right), u2 \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 \]
    6. Add Preprocessing

    Alternative 7: 85.1% accurate, 2.1× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\frac{u1}{1 - u1} \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\frac{1}{\left(1 - u1\right) \cdot u1}} \cdot \left(\left(6.28318530718 \cdot u1\right) \cdot u2\right)\\ \end{array} \end{array} \]
    (FPCore (cosTheta_i u1 u2)
     :precision binary32
     (if (<= (/ u1 (- 1.0 u1)) 1.500000053056283e-6)
       (*
        (*
         (sqrt u1)
         (fma
          (* (fma 81.6052492761019 (* u2 u2) -41.341702240407926) u2)
          u2
          6.28318530718))
        u2)
       (* (sqrt (/ 1.0 (* (- 1.0 u1) u1))) (* (* 6.28318530718 u1) u2))))
    float code(float cosTheta_i, float u1, float u2) {
    	float tmp;
    	if ((u1 / (1.0f - u1)) <= 1.500000053056283e-6f) {
    		tmp = (sqrtf(u1) * fmaf((fmaf(81.6052492761019f, (u2 * u2), -41.341702240407926f) * u2), u2, 6.28318530718f)) * u2;
    	} else {
    		tmp = sqrtf((1.0f / ((1.0f - u1) * u1))) * ((6.28318530718f * u1) * u2);
    	}
    	return tmp;
    }
    
    function code(cosTheta_i, u1, u2)
    	tmp = Float32(0.0)
    	if (Float32(u1 / Float32(Float32(1.0) - u1)) <= Float32(1.500000053056283e-6))
    		tmp = Float32(Float32(sqrt(u1) * fma(Float32(fma(Float32(81.6052492761019), Float32(u2 * u2), Float32(-41.341702240407926)) * u2), u2, Float32(6.28318530718))) * u2);
    	else
    		tmp = Float32(sqrt(Float32(Float32(1.0) / Float32(Float32(Float32(1.0) - u1) * u1))) * Float32(Float32(Float32(6.28318530718) * u1) * u2));
    	end
    	return tmp
    end
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    \mathbf{if}\;\frac{u1}{1 - u1} \leq 1.500000053056283 \cdot 10^{-6}:\\
    \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\
    
    \mathbf{else}:\\
    \;\;\;\;\sqrt{\frac{1}{\left(1 - u1\right) \cdot u1}} \cdot \left(\left(6.28318530718 \cdot u1\right) \cdot u2\right)\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if (/.f32 u1 (-.f32 #s(literal 1 binary32) u1)) < 1.50000005e-6

      1. Initial program 98.7%

        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
      2. Add Preprocessing
      3. Taylor expanded in u2 around 0

        \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
      4. Applied rewrites90.7%

        \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
      5. Step-by-step derivation
        1. Applied rewrites90.6%

          \[\leadsto \frac{\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right)}{\sqrt{\frac{1 - u1}{u1}}} \cdot u2 \]
        2. Taylor expanded in u1 around 0

          \[\leadsto \left(\sqrt{u1} \cdot \left(\frac{314159265359}{50000000000} + u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2 + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot {u2}^{3}\right)\right)\right) \cdot u2 \]
        3. Step-by-step derivation
          1. Applied rewrites90.1%

            \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{u1}\right) \cdot u2 \]

          if 1.50000005e-6 < (/.f32 u1 (-.f32 #s(literal 1 binary32) u1))

          1. Initial program 98.3%

            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          2. Add Preprocessing
          3. Applied rewrites98.5%

            \[\leadsto \sqrt{\color{blue}{\frac{0 \cdot \frac{u1 - 1}{u1} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          4. Step-by-step derivation
            1. lift-/.f32N/A

              \[\leadsto \sqrt{\color{blue}{\frac{0 \cdot \frac{u1 - 1}{u1} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            2. lift--.f32N/A

              \[\leadsto \sqrt{\frac{\color{blue}{0 \cdot \frac{u1 - 1}{u1} - \left(1 - u1\right)}}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            3. lift-*.f32N/A

              \[\leadsto \sqrt{\frac{\color{blue}{0 \cdot \frac{u1 - 1}{u1}} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            4. mul0-lftN/A

              \[\leadsto \sqrt{\frac{\color{blue}{0} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            5. neg-sub0N/A

              \[\leadsto \sqrt{\frac{\color{blue}{\mathsf{neg}\left(\left(1 - u1\right)\right)}}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            6. lift-*.f32N/A

              \[\leadsto \sqrt{\frac{\mathsf{neg}\left(\left(1 - u1\right)\right)}{\color{blue}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            7. *-commutativeN/A

              \[\leadsto \sqrt{\frac{\mathsf{neg}\left(\left(1 - u1\right)\right)}{\color{blue}{\frac{u1 - 1}{u1} \cdot \left(1 - u1\right)}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            8. neg-mul-1N/A

              \[\leadsto \sqrt{\frac{\color{blue}{-1 \cdot \left(1 - u1\right)}}{\frac{u1 - 1}{u1} \cdot \left(1 - u1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            9. times-fracN/A

              \[\leadsto \sqrt{\color{blue}{\frac{-1}{\frac{u1 - 1}{u1}} \cdot \frac{1 - u1}{1 - u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
          5. Applied rewrites98.2%

            \[\leadsto \sqrt{\color{blue}{\frac{1}{\frac{1 - u1}{u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          6. Step-by-step derivation
            1. lift-/.f32N/A

              \[\leadsto \sqrt{\frac{1}{\color{blue}{\frac{1 - u1}{u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            2. lift--.f32N/A

              \[\leadsto \sqrt{\frac{1}{\frac{\color{blue}{1 - u1}}{u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            3. div-subN/A

              \[\leadsto \sqrt{\frac{1}{\color{blue}{\frac{1}{u1} - \frac{u1}{u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            4. frac-subN/A

              \[\leadsto \sqrt{\frac{1}{\color{blue}{\frac{1 \cdot u1 - u1 \cdot u1}{u1 \cdot u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            5. *-lft-identityN/A

              \[\leadsto \sqrt{\frac{1}{\frac{\color{blue}{u1} - u1 \cdot u1}{u1 \cdot u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            6. lower-/.f32N/A

              \[\leadsto \sqrt{\frac{1}{\color{blue}{\frac{u1 - u1 \cdot u1}{u1 \cdot u1}}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            7. lower--.f32N/A

              \[\leadsto \sqrt{\frac{1}{\frac{\color{blue}{u1 - u1 \cdot u1}}{u1 \cdot u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            8. lower-*.f32N/A

              \[\leadsto \sqrt{\frac{1}{\frac{u1 - \color{blue}{u1 \cdot u1}}{u1 \cdot u1}}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
            9. lower-*.f3298.3

              \[\leadsto \sqrt{\frac{1}{\frac{u1 - u1 \cdot u1}{\color{blue}{u1 \cdot u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          7. Applied rewrites98.3%

            \[\leadsto \sqrt{\frac{1}{\color{blue}{\frac{u1 - u1 \cdot u1}{u1 \cdot u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          8. Taylor expanded in u2 around 0

            \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\left(u1 \cdot u2\right) \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}\right)} \]
          9. Step-by-step derivation
            1. *-commutativeN/A

              \[\leadsto \frac{314159265359}{50000000000} \cdot \color{blue}{\left(\sqrt{\frac{1}{u1 - {u1}^{2}}} \cdot \left(u1 \cdot u2\right)\right)} \]
            2. associate-*r*N/A

              \[\leadsto \frac{314159265359}{50000000000} \cdot \color{blue}{\left(\left(\sqrt{\frac{1}{u1 - {u1}^{2}}} \cdot u1\right) \cdot u2\right)} \]
            3. *-commutativeN/A

              \[\leadsto \frac{314159265359}{50000000000} \cdot \left(\color{blue}{\left(u1 \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}\right)} \cdot u2\right) \]
            4. associate-*l*N/A

              \[\leadsto \color{blue}{\left(\frac{314159265359}{50000000000} \cdot \left(u1 \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}\right)\right) \cdot u2} \]
            5. *-commutativeN/A

              \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \left(u1 \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}\right)\right)} \]
            6. associate-*r*N/A

              \[\leadsto u2 \cdot \color{blue}{\left(\left(\frac{314159265359}{50000000000} \cdot u1\right) \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}\right)} \]
            7. associate-*r*N/A

              \[\leadsto \color{blue}{\left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}} \]
            8. lower-*.f32N/A

              \[\leadsto \color{blue}{\left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}}} \]
            9. lower-*.f32N/A

              \[\leadsto \color{blue}{\left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right)} \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}} \]
            10. lower-*.f32N/A

              \[\leadsto \left(u2 \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u1\right)}\right) \cdot \sqrt{\frac{1}{u1 - {u1}^{2}}} \]
            11. lower-sqrt.f32N/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \color{blue}{\sqrt{\frac{1}{u1 - {u1}^{2}}}} \]
            12. lower-/.f32N/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\color{blue}{\frac{1}{u1 - {u1}^{2}}}} \]
            13. sub-negN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{\color{blue}{u1 + \left(\mathsf{neg}\left({u1}^{2}\right)\right)}}} \]
            14. *-rgt-identityN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{\color{blue}{u1 \cdot 1} + \left(\mathsf{neg}\left({u1}^{2}\right)\right)}} \]
            15. unpow2N/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot 1 + \left(\mathsf{neg}\left(\color{blue}{u1 \cdot u1}\right)\right)}} \]
            16. distribute-rgt-neg-inN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot 1 + \color{blue}{u1 \cdot \left(\mathsf{neg}\left(u1\right)\right)}}} \]
            17. mul-1-negN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot 1 + u1 \cdot \color{blue}{\left(-1 \cdot u1\right)}}} \]
            18. distribute-lft-outN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{\color{blue}{u1 \cdot \left(1 + -1 \cdot u1\right)}}} \]
            19. lower-*.f32N/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{\color{blue}{u1 \cdot \left(1 + -1 \cdot u1\right)}}} \]
            20. mul-1-negN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot \left(1 + \color{blue}{\left(\mathsf{neg}\left(u1\right)\right)}\right)}} \]
            21. sub-negN/A

              \[\leadsto \left(u2 \cdot \left(\frac{314159265359}{50000000000} \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot \color{blue}{\left(1 - u1\right)}}} \]
            22. lower--.f3283.4

              \[\leadsto \left(u2 \cdot \left(6.28318530718 \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot \color{blue}{\left(1 - u1\right)}}} \]
          10. Applied rewrites83.4%

            \[\leadsto \color{blue}{\left(u2 \cdot \left(6.28318530718 \cdot u1\right)\right) \cdot \sqrt{\frac{1}{u1 \cdot \left(1 - u1\right)}}} \]
        4. Recombined 2 regimes into one program.
        5. Final simplification86.1%

          \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{u1}{1 - u1} \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\frac{1}{\left(1 - u1\right) \cdot u1}} \cdot \left(\left(6.28318530718 \cdot u1\right) \cdot u2\right)\\ \end{array} \]
        6. Add Preprocessing

        Alternative 8: 85.2% accurate, 2.1× speedup?

        \[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{u1}{1 - u1}\\ \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\ \end{array} \end{array} \]
        (FPCore (cosTheta_i u1 u2)
         :precision binary32
         (let* ((t_0 (/ u1 (- 1.0 u1))))
           (if (<= t_0 1.500000053056283e-6)
             (*
              (*
               (sqrt u1)
               (fma
                (* (fma 81.6052492761019 (* u2 u2) -41.341702240407926) u2)
                u2
                6.28318530718))
              u2)
             (* (* (sqrt t_0) u2) 6.28318530718))))
        float code(float cosTheta_i, float u1, float u2) {
        	float t_0 = u1 / (1.0f - u1);
        	float tmp;
        	if (t_0 <= 1.500000053056283e-6f) {
        		tmp = (sqrtf(u1) * fmaf((fmaf(81.6052492761019f, (u2 * u2), -41.341702240407926f) * u2), u2, 6.28318530718f)) * u2;
        	} else {
        		tmp = (sqrtf(t_0) * u2) * 6.28318530718f;
        	}
        	return tmp;
        }
        
        function code(cosTheta_i, u1, u2)
        	t_0 = Float32(u1 / Float32(Float32(1.0) - u1))
        	tmp = Float32(0.0)
        	if (t_0 <= Float32(1.500000053056283e-6))
        		tmp = Float32(Float32(sqrt(u1) * fma(Float32(fma(Float32(81.6052492761019), Float32(u2 * u2), Float32(-41.341702240407926)) * u2), u2, Float32(6.28318530718))) * u2);
        	else
        		tmp = Float32(Float32(sqrt(t_0) * u2) * Float32(6.28318530718));
        	end
        	return tmp
        end
        
        \begin{array}{l}
        
        \\
        \begin{array}{l}
        t_0 := \frac{u1}{1 - u1}\\
        \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\
        \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\
        
        \mathbf{else}:\\
        \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 2 regimes
        2. if (/.f32 u1 (-.f32 #s(literal 1 binary32) u1)) < 1.50000005e-6

          1. Initial program 98.7%

            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
          2. Add Preprocessing
          3. Taylor expanded in u2 around 0

            \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
          4. Applied rewrites90.7%

            \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
          5. Step-by-step derivation
            1. Applied rewrites90.6%

              \[\leadsto \frac{\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right)}{\sqrt{\frac{1 - u1}{u1}}} \cdot u2 \]
            2. Taylor expanded in u1 around 0

              \[\leadsto \left(\sqrt{u1} \cdot \left(\frac{314159265359}{50000000000} + u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2 + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot {u2}^{3}\right)\right)\right) \cdot u2 \]
            3. Step-by-step derivation
              1. Applied rewrites90.1%

                \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{u1}\right) \cdot u2 \]

              if 1.50000005e-6 < (/.f32 u1 (-.f32 #s(literal 1 binary32) u1))

              1. Initial program 98.3%

                \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
              2. Add Preprocessing
              3. Taylor expanded in u2 around 0

                \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
              4. Step-by-step derivation
                1. *-commutativeN/A

                  \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                2. associate-*l*N/A

                  \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                3. *-commutativeN/A

                  \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                4. lower-*.f32N/A

                  \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
              5. Applied rewrites83.2%

                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
              6. Step-by-step derivation
                1. Applied rewrites83.3%

                  \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \color{blue}{6.28318530718} \]
              7. Recombined 2 regimes into one program.
              8. Final simplification86.1%

                \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{u1}{1 - u1} \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot 6.28318530718\\ \end{array} \]
              9. Add Preprocessing

              Alternative 9: 85.2% accurate, 2.1× speedup?

              \[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{u1}{1 - u1}\\ \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right) \cdot u2\right) \cdot \sqrt{u1}\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\ \end{array} \end{array} \]
              (FPCore (cosTheta_i u1 u2)
               :precision binary32
               (let* ((t_0 (/ u1 (- 1.0 u1))))
                 (if (<= t_0 1.500000053056283e-6)
                   (*
                    (*
                     (fma
                      (* (fma 81.6052492761019 (* u2 u2) -41.341702240407926) u2)
                      u2
                      6.28318530718)
                     u2)
                    (sqrt u1))
                   (* (* (sqrt t_0) u2) 6.28318530718))))
              float code(float cosTheta_i, float u1, float u2) {
              	float t_0 = u1 / (1.0f - u1);
              	float tmp;
              	if (t_0 <= 1.500000053056283e-6f) {
              		tmp = (fmaf((fmaf(81.6052492761019f, (u2 * u2), -41.341702240407926f) * u2), u2, 6.28318530718f) * u2) * sqrtf(u1);
              	} else {
              		tmp = (sqrtf(t_0) * u2) * 6.28318530718f;
              	}
              	return tmp;
              }
              
              function code(cosTheta_i, u1, u2)
              	t_0 = Float32(u1 / Float32(Float32(1.0) - u1))
              	tmp = Float32(0.0)
              	if (t_0 <= Float32(1.500000053056283e-6))
              		tmp = Float32(Float32(fma(Float32(fma(Float32(81.6052492761019), Float32(u2 * u2), Float32(-41.341702240407926)) * u2), u2, Float32(6.28318530718)) * u2) * sqrt(u1));
              	else
              		tmp = Float32(Float32(sqrt(t_0) * u2) * Float32(6.28318530718));
              	end
              	return tmp
              end
              
              \begin{array}{l}
              
              \\
              \begin{array}{l}
              t_0 := \frac{u1}{1 - u1}\\
              \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\
              \;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right) \cdot u2\right) \cdot \sqrt{u1}\\
              
              \mathbf{else}:\\
              \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\
              
              
              \end{array}
              \end{array}
              
              Derivation
              1. Split input into 2 regimes
              2. if (/.f32 u1 (-.f32 #s(literal 1 binary32) u1)) < 1.50000005e-6

                1. Initial program 98.7%

                  \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                2. Add Preprocessing
                3. Taylor expanded in u2 around 0

                  \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
                4. Applied rewrites90.7%

                  \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
                5. Step-by-step derivation
                  1. Applied rewrites90.6%

                    \[\leadsto \frac{\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right)}{\sqrt{\frac{1 - u1}{u1}}} \cdot u2 \]
                  2. Taylor expanded in u1 around 0

                    \[\leadsto \sqrt{u1} \cdot \color{blue}{\left(u2 \cdot \left(\frac{314159265359}{50000000000} + u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2 + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot {u2}^{3}\right)\right)\right)} \]
                  3. Step-by-step derivation
                    1. Applied rewrites90.0%

                      \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right) \cdot u2, u2, 6.28318530718\right) \cdot u2\right) \cdot \color{blue}{\sqrt{u1}} \]

                    if 1.50000005e-6 < (/.f32 u1 (-.f32 #s(literal 1 binary32) u1))

                    1. Initial program 98.3%

                      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                    2. Add Preprocessing
                    3. Taylor expanded in u2 around 0

                      \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                    4. Step-by-step derivation
                      1. *-commutativeN/A

                        \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                      2. associate-*l*N/A

                        \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                      3. *-commutativeN/A

                        \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                      4. lower-*.f32N/A

                        \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                    5. Applied rewrites83.2%

                      \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                    6. Step-by-step derivation
                      1. Applied rewrites83.3%

                        \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \color{blue}{6.28318530718} \]
                    7. Recombined 2 regimes into one program.
                    8. Add Preprocessing

                    Alternative 10: 91.6% accurate, 2.2× speedup?

                    \[\begin{array}{l} \\ \left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}} \end{array} \]
                    (FPCore (cosTheta_i u1 u2)
                     :precision binary32
                     (*
                      (*
                       (fma
                        u2
                        (fma (* (* u2 u2) u2) 81.6052492761019 (* -41.341702240407926 u2))
                        6.28318530718)
                       u2)
                      (sqrt (/ u1 (- 1.0 u1)))))
                    float code(float cosTheta_i, float u1, float u2) {
                    	return (fmaf(u2, fmaf(((u2 * u2) * u2), 81.6052492761019f, (-41.341702240407926f * u2)), 6.28318530718f) * u2) * sqrtf((u1 / (1.0f - u1)));
                    }
                    
                    function code(cosTheta_i, u1, u2)
                    	return Float32(Float32(fma(u2, fma(Float32(Float32(u2 * u2) * u2), Float32(81.6052492761019), Float32(Float32(-41.341702240407926) * u2)), Float32(6.28318530718)) * u2) * sqrt(Float32(u1 / Float32(Float32(1.0) - u1))))
                    end
                    
                    \begin{array}{l}
                    
                    \\
                    \left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}
                    \end{array}
                    
                    Derivation
                    1. Initial program 98.5%

                      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                    2. Add Preprocessing
                    3. Taylor expanded in u2 around 0

                      \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
                    4. Applied rewrites92.1%

                      \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
                    5. Step-by-step derivation
                      1. Applied rewrites92.2%

                        \[\leadsto \color{blue}{\left(\mathsf{fma}\left(u2, \mathsf{fma}\left(\left(u2 \cdot u2\right) \cdot u2, 81.6052492761019, -41.341702240407926 \cdot u2\right), 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}} \]
                      2. Add Preprocessing

                      Alternative 11: 91.6% accurate, 2.4× speedup?

                      \[\begin{array}{l} \\ \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right), u2 \cdot u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 \end{array} \]
                      (FPCore (cosTheta_i u1 u2)
                       :precision binary32
                       (*
                        (*
                         (fma
                          (fma 81.6052492761019 (* u2 u2) -41.341702240407926)
                          (* u2 u2)
                          6.28318530718)
                         (sqrt (/ u1 (- 1.0 u1))))
                        u2))
                      float code(float cosTheta_i, float u1, float u2) {
                      	return (fmaf(fmaf(81.6052492761019f, (u2 * u2), -41.341702240407926f), (u2 * u2), 6.28318530718f) * sqrtf((u1 / (1.0f - u1)))) * u2;
                      }
                      
                      function code(cosTheta_i, u1, u2)
                      	return Float32(Float32(fma(fma(Float32(81.6052492761019), Float32(u2 * u2), Float32(-41.341702240407926)), Float32(u2 * u2), Float32(6.28318530718)) * sqrt(Float32(u1 / Float32(Float32(1.0) - u1)))) * u2)
                      end
                      
                      \begin{array}{l}
                      
                      \\
                      \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right), u2 \cdot u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2
                      \end{array}
                      
                      Derivation
                      1. Initial program 98.5%

                        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                      2. Add Preprocessing
                      3. Taylor expanded in u2 around 0

                        \[\leadsto \color{blue}{u2 \cdot \left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + {u2}^{2} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)\right)} \]
                      4. Applied rewrites92.1%

                        \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(81.6052492761019, \left(\left(u2 \cdot u2\right) \cdot u2\right) \cdot u2, \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right)\right) \cdot u2} \]
                      5. Taylor expanded in u2 around 0

                        \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} + {u2}^{2} \cdot \left(\frac{3060196847853821555298148281676017575122444629042460390799}{37500000000000000000000000000000000000000000000000000000} \cdot {u2}^{2} - \frac{31006276680305942139213528068663279}{750000000000000000000000000000000}\right)\right)\right) \cdot u2 \]
                      6. Step-by-step derivation
                        1. Applied rewrites92.1%

                          \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right), u2 \cdot u2, 6.28318530718\right)\right) \cdot u2 \]
                        2. Final simplification92.1%

                          \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(81.6052492761019, u2 \cdot u2, -41.341702240407926\right), u2 \cdot u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 \]
                        3. Add Preprocessing

                        Alternative 12: 84.1% accurate, 2.5× speedup?

                        \[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{u1}{1 - u1}\\ \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\ \end{array} \end{array} \]
                        (FPCore (cosTheta_i u1 u2)
                         :precision binary32
                         (let* ((t_0 (/ u1 (- 1.0 u1))))
                           (if (<= t_0 1.500000053056283e-6)
                             (* (* (sqrt u1) (fma (* -41.341702240407926 u2) u2 6.28318530718)) u2)
                             (* (* (sqrt t_0) u2) 6.28318530718))))
                        float code(float cosTheta_i, float u1, float u2) {
                        	float t_0 = u1 / (1.0f - u1);
                        	float tmp;
                        	if (t_0 <= 1.500000053056283e-6f) {
                        		tmp = (sqrtf(u1) * fmaf((-41.341702240407926f * u2), u2, 6.28318530718f)) * u2;
                        	} else {
                        		tmp = (sqrtf(t_0) * u2) * 6.28318530718f;
                        	}
                        	return tmp;
                        }
                        
                        function code(cosTheta_i, u1, u2)
                        	t_0 = Float32(u1 / Float32(Float32(1.0) - u1))
                        	tmp = Float32(0.0)
                        	if (t_0 <= Float32(1.500000053056283e-6))
                        		tmp = Float32(Float32(sqrt(u1) * fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718))) * u2);
                        	else
                        		tmp = Float32(Float32(sqrt(t_0) * u2) * Float32(6.28318530718));
                        	end
                        	return tmp
                        end
                        
                        \begin{array}{l}
                        
                        \\
                        \begin{array}{l}
                        t_0 := \frac{u1}{1 - u1}\\
                        \mathbf{if}\;t\_0 \leq 1.500000053056283 \cdot 10^{-6}:\\
                        \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\
                        
                        \mathbf{else}:\\
                        \;\;\;\;\left(\sqrt{t\_0} \cdot u2\right) \cdot 6.28318530718\\
                        
                        
                        \end{array}
                        \end{array}
                        
                        Derivation
                        1. Split input into 2 regimes
                        2. if (/.f32 u1 (-.f32 #s(literal 1 binary32) u1)) < 1.50000005e-6

                          1. Initial program 98.7%

                            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                          2. Add Preprocessing
                          3. Taylor expanded in u2 around 0

                            \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                          4. Applied rewrites86.6%

                            \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                          5. Taylor expanded in u1 around 0

                            \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2, u2, \frac{314159265359}{50000000000}\right)\right) \cdot u2 \]
                          6. Step-by-step derivation
                            1. Applied rewrites86.1%

                              \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2 \]

                            if 1.50000005e-6 < (/.f32 u1 (-.f32 #s(literal 1 binary32) u1))

                            1. Initial program 98.3%

                              \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            2. Add Preprocessing
                            3. Taylor expanded in u2 around 0

                              \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                            4. Step-by-step derivation
                              1. *-commutativeN/A

                                \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                              2. associate-*l*N/A

                                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                              3. *-commutativeN/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                              4. lower-*.f32N/A

                                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                            5. Applied rewrites83.2%

                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                            6. Step-by-step derivation
                              1. Applied rewrites83.3%

                                \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \color{blue}{6.28318530718} \]
                            7. Recombined 2 regimes into one program.
                            8. Add Preprocessing

                            Alternative 13: 89.0% accurate, 2.9× speedup?

                            \[\begin{array}{l} \\ \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}} \end{array} \]
                            (FPCore (cosTheta_i u1 u2)
                             :precision binary32
                             (*
                              (* (fma (* u2 u2) -41.341702240407926 6.28318530718) u2)
                              (sqrt (/ u1 (- 1.0 u1)))))
                            float code(float cosTheta_i, float u1, float u2) {
                            	return (fmaf((u2 * u2), -41.341702240407926f, 6.28318530718f) * u2) * sqrtf((u1 / (1.0f - u1)));
                            }
                            
                            function code(cosTheta_i, u1, u2)
                            	return Float32(Float32(fma(Float32(u2 * u2), Float32(-41.341702240407926), Float32(6.28318530718)) * u2) * sqrt(Float32(u1 / Float32(Float32(1.0) - u1))))
                            end
                            
                            \begin{array}{l}
                            
                            \\
                            \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}}
                            \end{array}
                            
                            Derivation
                            1. Initial program 98.5%

                              \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            2. Add Preprocessing
                            3. Applied rewrites98.6%

                              \[\leadsto \sqrt{\color{blue}{\frac{0 \cdot \frac{u1 - 1}{u1} - \left(1 - u1\right)}{\left(1 - u1\right) \cdot \frac{u1 - 1}{u1}}}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            4. Taylor expanded in u1 around 0

                              \[\leadsto \sqrt{\color{blue}{u1 \cdot \left(1 + u1\right)}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
                            5. Step-by-step derivation
                              1. *-commutativeN/A

                                \[\leadsto \sqrt{\color{blue}{\left(1 + u1\right) \cdot u1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
                              2. +-commutativeN/A

                                \[\leadsto \sqrt{\color{blue}{\left(u1 + 1\right)} \cdot u1} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
                              3. distribute-lft1-inN/A

                                \[\leadsto \sqrt{\color{blue}{u1 \cdot u1 + u1}} \cdot \sin \left(\frac{314159265359}{50000000000} \cdot u2\right) \]
                              4. lower-fma.f3285.4

                                \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(u1, u1, u1\right)}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            6. Applied rewrites85.4%

                              \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(u1, u1, u1\right)}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            7. Taylor expanded in u2 around 0

                              \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                            8. Step-by-step derivation
                              1. +-commutativeN/A

                                \[\leadsto u2 \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}} + \frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right)} \]
                              2. distribute-rgt-inN/A

                                \[\leadsto \color{blue}{\left(\frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right) \cdot u2} \]
                              3. associate-*r*N/A

                                \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right) \cdot u2 \]
                              4. *-commutativeN/A

                                \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right) \cdot u2 \]
                              5. associate-*l*N/A

                                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right) \cdot u2 \]
                              6. *-commutativeN/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right)\right) \cdot u2 \]
                              7. associate-*r*N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \color{blue}{\left(\left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot {u2}^{2}\right)} \cdot u2 \]
                              8. associate-*r*N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \color{blue}{\left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \left({u2}^{2} \cdot u2\right)} \]
                              9. unpow2N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \left(\color{blue}{\left(u2 \cdot u2\right)} \cdot u2\right) \]
                              10. unpow3N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot \color{blue}{{u2}^{3}} \]
                              11. *-commutativeN/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \frac{-31006276680305942139213528068663279}{750000000000000000000000000000000}\right)} \cdot {u2}^{3} \]
                              12. associate-*l*N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot {u2}^{3}\right)} \]
                              13. unpow3N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \color{blue}{\left(\left(u2 \cdot u2\right) \cdot u2\right)}\right) \]
                              14. unpow2N/A

                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right) + \sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\color{blue}{{u2}^{2}} \cdot u2\right)\right) \]
                            9. Applied rewrites89.5%

                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right)} \]
                            10. Final simplification89.5%

                              \[\leadsto \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right) \cdot \sqrt{\frac{u1}{1 - u1}} \]
                            11. Add Preprocessing

                            Alternative 14: 88.9% accurate, 2.9× speedup?

                            \[\begin{array}{l} \\ \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \end{array} \]
                            (FPCore (cosTheta_i u1 u2)
                             :precision binary32
                             (*
                              (* (sqrt (/ u1 (- 1.0 u1))) u2)
                              (fma (* -41.341702240407926 u2) u2 6.28318530718)))
                            float code(float cosTheta_i, float u1, float u2) {
                            	return (sqrtf((u1 / (1.0f - u1))) * u2) * fmaf((-41.341702240407926f * u2), u2, 6.28318530718f);
                            }
                            
                            function code(cosTheta_i, u1, u2)
                            	return Float32(Float32(sqrt(Float32(u1 / Float32(Float32(1.0) - u1))) * u2) * fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718)))
                            end
                            
                            \begin{array}{l}
                            
                            \\
                            \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)
                            \end{array}
                            
                            Derivation
                            1. Initial program 98.5%

                              \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                            2. Add Preprocessing
                            3. Taylor expanded in u2 around 0

                              \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                            4. Applied rewrites89.3%

                              \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                            5. Step-by-step derivation
                              1. Applied rewrites89.4%

                                \[\leadsto \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                              2. Final simplification89.4%

                                \[\leadsto \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \]
                              3. Add Preprocessing

                              Alternative 15: 89.0% accurate, 2.9× speedup?

                              \[\begin{array}{l} \\ \left(\mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 \end{array} \]
                              (FPCore (cosTheta_i u1 u2)
                               :precision binary32
                               (*
                                (*
                                 (fma (* -41.341702240407926 u2) u2 6.28318530718)
                                 (sqrt (/ u1 (- 1.0 u1))))
                                u2))
                              float code(float cosTheta_i, float u1, float u2) {
                              	return (fmaf((-41.341702240407926f * u2), u2, 6.28318530718f) * sqrtf((u1 / (1.0f - u1)))) * u2;
                              }
                              
                              function code(cosTheta_i, u1, u2)
                              	return Float32(Float32(fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718)) * sqrt(Float32(u1 / Float32(Float32(1.0) - u1)))) * u2)
                              end
                              
                              \begin{array}{l}
                              
                              \\
                              \left(\mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2
                              \end{array}
                              
                              Derivation
                              1. Initial program 98.5%

                                \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                              2. Add Preprocessing
                              3. Taylor expanded in u2 around 0

                                \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                              4. Applied rewrites89.3%

                                \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                              5. Final simplification89.3%

                                \[\leadsto \left(\mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right) \cdot \sqrt{\frac{u1}{1 - u1}}\right) \cdot u2 \]
                              6. Add Preprocessing

                              Alternative 16: 78.9% accurate, 3.1× speedup?

                              \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.02500000037252903:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \end{array} \end{array} \]
                              (FPCore (cosTheta_i u1 u2)
                               :precision binary32
                               (if (<= (* u2 6.28318530718) 0.02500000037252903)
                                 (* (sqrt (fma (fma u1 u1 u1) u1 u1)) (* u2 6.28318530718))
                                 (* (* (sqrt u1) (fma (* -41.341702240407926 u2) u2 6.28318530718)) u2)))
                              float code(float cosTheta_i, float u1, float u2) {
                              	float tmp;
                              	if ((u2 * 6.28318530718f) <= 0.02500000037252903f) {
                              		tmp = sqrtf(fmaf(fmaf(u1, u1, u1), u1, u1)) * (u2 * 6.28318530718f);
                              	} else {
                              		tmp = (sqrtf(u1) * fmaf((-41.341702240407926f * u2), u2, 6.28318530718f)) * u2;
                              	}
                              	return tmp;
                              }
                              
                              function code(cosTheta_i, u1, u2)
                              	tmp = Float32(0.0)
                              	if (Float32(u2 * Float32(6.28318530718)) <= Float32(0.02500000037252903))
                              		tmp = Float32(sqrt(fma(fma(u1, u1, u1), u1, u1)) * Float32(u2 * Float32(6.28318530718)));
                              	else
                              		tmp = Float32(Float32(sqrt(u1) * fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718))) * u2);
                              	end
                              	return tmp
                              end
                              
                              \begin{array}{l}
                              
                              \\
                              \begin{array}{l}
                              \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.02500000037252903:\\
                              \;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\
                              
                              \mathbf{else}:\\
                              \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\
                              
                              
                              \end{array}
                              \end{array}
                              
                              Derivation
                              1. Split input into 2 regimes
                              2. if (*.f32 #s(literal 314159265359/50000000000 binary32) u2) < 0.0250000004

                                1. Initial program 98.5%

                                  \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                2. Add Preprocessing
                                3. Taylor expanded in u2 around 0

                                  \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                4. Step-by-step derivation
                                  1. *-commutativeN/A

                                    \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                  2. associate-*l*N/A

                                    \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                  3. *-commutativeN/A

                                    \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                  4. lower-*.f32N/A

                                    \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                5. Applied rewrites95.1%

                                  \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                6. Taylor expanded in u1 around 0

                                  \[\leadsto \sqrt{u1 \cdot \left(1 + u1 \cdot \left(1 + u1\right)\right)} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right) \]
                                7. Step-by-step derivation
                                  1. Applied rewrites87.0%

                                    \[\leadsto \sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right) \]

                                  if 0.0250000004 < (*.f32 #s(literal 314159265359/50000000000 binary32) u2)

                                  1. Initial program 98.3%

                                    \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                  2. Add Preprocessing
                                  3. Taylor expanded in u2 around 0

                                    \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                                  4. Applied rewrites63.7%

                                    \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                                  5. Taylor expanded in u1 around 0

                                    \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2, u2, \frac{314159265359}{50000000000}\right)\right) \cdot u2 \]
                                  6. Step-by-step derivation
                                    1. Applied rewrites52.7%

                                      \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2 \]
                                  7. Recombined 2 regimes into one program.
                                  8. Final simplification78.0%

                                    \[\leadsto \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.02500000037252903:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(u1, u1, u1\right), u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \end{array} \]
                                  9. Add Preprocessing

                                  Alternative 17: 76.5% accurate, 3.1× speedup?

                                  \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \end{array} \end{array} \]
                                  (FPCore (cosTheta_i u1 u2)
                                   :precision binary32
                                   (if (<= (* u2 6.28318530718) 0.00800000037997961)
                                     (* (sqrt (fma u1 u1 u1)) (* u2 6.28318530718))
                                     (* (* (sqrt u1) (fma (* -41.341702240407926 u2) u2 6.28318530718)) u2)))
                                  float code(float cosTheta_i, float u1, float u2) {
                                  	float tmp;
                                  	if ((u2 * 6.28318530718f) <= 0.00800000037997961f) {
                                  		tmp = sqrtf(fmaf(u1, u1, u1)) * (u2 * 6.28318530718f);
                                  	} else {
                                  		tmp = (sqrtf(u1) * fmaf((-41.341702240407926f * u2), u2, 6.28318530718f)) * u2;
                                  	}
                                  	return tmp;
                                  }
                                  
                                  function code(cosTheta_i, u1, u2)
                                  	tmp = Float32(0.0)
                                  	if (Float32(u2 * Float32(6.28318530718)) <= Float32(0.00800000037997961))
                                  		tmp = Float32(sqrt(fma(u1, u1, u1)) * Float32(u2 * Float32(6.28318530718)));
                                  	else
                                  		tmp = Float32(Float32(sqrt(u1) * fma(Float32(Float32(-41.341702240407926) * u2), u2, Float32(6.28318530718))) * u2);
                                  	end
                                  	return tmp
                                  end
                                  
                                  \begin{array}{l}
                                  
                                  \\
                                  \begin{array}{l}
                                  \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\
                                  \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\
                                  
                                  \mathbf{else}:\\
                                  \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\
                                  
                                  
                                  \end{array}
                                  \end{array}
                                  
                                  Derivation
                                  1. Split input into 2 regimes
                                  2. if (*.f32 #s(literal 314159265359/50000000000 binary32) u2) < 0.00800000038

                                    1. Initial program 98.6%

                                      \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                    2. Add Preprocessing
                                    3. Taylor expanded in u2 around 0

                                      \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                    4. Step-by-step derivation
                                      1. *-commutativeN/A

                                        \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                      2. associate-*l*N/A

                                        \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                      3. *-commutativeN/A

                                        \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                      4. lower-*.f32N/A

                                        \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                    5. Applied rewrites96.9%

                                      \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                    6. Taylor expanded in u1 around 0

                                      \[\leadsto \sqrt{u1 \cdot \left(1 + u1\right)} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right) \]
                                    7. Step-by-step derivation
                                      1. Applied rewrites84.2%

                                        \[\leadsto \sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right) \]

                                      if 0.00800000038 < (*.f32 #s(literal 314159265359/50000000000 binary32) u2)

                                      1. Initial program 98.3%

                                        \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                      2. Add Preprocessing
                                      3. Taylor expanded in u2 around 0

                                        \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                                      4. Applied rewrites69.7%

                                        \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                                      5. Taylor expanded in u1 around 0

                                        \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot u2, u2, \frac{314159265359}{50000000000}\right)\right) \cdot u2 \]
                                      6. Step-by-step derivation
                                        1. Applied rewrites55.2%

                                          \[\leadsto \left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2 \]
                                      7. Recombined 2 regimes into one program.
                                      8. Final simplification75.0%

                                        \[\leadsto \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{u1} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2\\ \end{array} \]
                                      9. Add Preprocessing

                                      Alternative 18: 76.5% accurate, 3.1× speedup?

                                      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{u1} \cdot \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right)\\ \end{array} \end{array} \]
                                      (FPCore (cosTheta_i u1 u2)
                                       :precision binary32
                                       (if (<= (* u2 6.28318530718) 0.00800000037997961)
                                         (* (sqrt (fma u1 u1 u1)) (* u2 6.28318530718))
                                         (* (sqrt u1) (* (fma (* u2 u2) -41.341702240407926 6.28318530718) u2))))
                                      float code(float cosTheta_i, float u1, float u2) {
                                      	float tmp;
                                      	if ((u2 * 6.28318530718f) <= 0.00800000037997961f) {
                                      		tmp = sqrtf(fmaf(u1, u1, u1)) * (u2 * 6.28318530718f);
                                      	} else {
                                      		tmp = sqrtf(u1) * (fmaf((u2 * u2), -41.341702240407926f, 6.28318530718f) * u2);
                                      	}
                                      	return tmp;
                                      }
                                      
                                      function code(cosTheta_i, u1, u2)
                                      	tmp = Float32(0.0)
                                      	if (Float32(u2 * Float32(6.28318530718)) <= Float32(0.00800000037997961))
                                      		tmp = Float32(sqrt(fma(u1, u1, u1)) * Float32(u2 * Float32(6.28318530718)));
                                      	else
                                      		tmp = Float32(sqrt(u1) * Float32(fma(Float32(u2 * u2), Float32(-41.341702240407926), Float32(6.28318530718)) * u2));
                                      	end
                                      	return tmp
                                      end
                                      
                                      \begin{array}{l}
                                      
                                      \\
                                      \begin{array}{l}
                                      \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\
                                      \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\
                                      
                                      \mathbf{else}:\\
                                      \;\;\;\;\sqrt{u1} \cdot \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right)\\
                                      
                                      
                                      \end{array}
                                      \end{array}
                                      
                                      Derivation
                                      1. Split input into 2 regimes
                                      2. if (*.f32 #s(literal 314159265359/50000000000 binary32) u2) < 0.00800000038

                                        1. Initial program 98.6%

                                          \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                        2. Add Preprocessing
                                        3. Taylor expanded in u2 around 0

                                          \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                        4. Step-by-step derivation
                                          1. *-commutativeN/A

                                            \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                          2. associate-*l*N/A

                                            \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                          3. *-commutativeN/A

                                            \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                          4. lower-*.f32N/A

                                            \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                        5. Applied rewrites96.9%

                                          \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                        6. Taylor expanded in u1 around 0

                                          \[\leadsto \sqrt{u1 \cdot \left(1 + u1\right)} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right) \]
                                        7. Step-by-step derivation
                                          1. Applied rewrites84.2%

                                            \[\leadsto \sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right) \]

                                          if 0.00800000038 < (*.f32 #s(literal 314159265359/50000000000 binary32) u2)

                                          1. Initial program 98.3%

                                            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                          2. Add Preprocessing
                                          3. Taylor expanded in u2 around 0

                                            \[\leadsto \color{blue}{u2 \cdot \left(\frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot {u2}^{2}\right) + \frac{314159265359}{50000000000} \cdot \sqrt{\frac{u1}{1 - u1}}\right)} \]
                                          4. Applied rewrites69.7%

                                            \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot \mathsf{fma}\left(-41.341702240407926 \cdot u2, u2, 6.28318530718\right)\right) \cdot u2} \]
                                          5. Taylor expanded in u1 around 0

                                            \[\leadsto \sqrt{u1} \cdot \color{blue}{\left(u2 \cdot \left(\frac{314159265359}{50000000000} + \frac{-31006276680305942139213528068663279}{750000000000000000000000000000000} \cdot {u2}^{2}\right)\right)} \]
                                          6. Step-by-step derivation
                                            1. Applied rewrites55.1%

                                              \[\leadsto \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right) \cdot \color{blue}{\sqrt{u1}} \]
                                          7. Recombined 2 regimes into one program.
                                          8. Final simplification75.0%

                                            \[\leadsto \begin{array}{l} \mathbf{if}\;u2 \cdot 6.28318530718 \leq 0.00800000037997961:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{u1} \cdot \left(\mathsf{fma}\left(u2 \cdot u2, -41.341702240407926, 6.28318530718\right) \cdot u2\right)\\ \end{array} \]
                                          9. Add Preprocessing

                                          Alternative 19: 81.3% accurate, 3.9× speedup?

                                          \[\begin{array}{l} \\ \sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right) \end{array} \]
                                          (FPCore (cosTheta_i u1 u2)
                                           :precision binary32
                                           (* (sqrt (/ u1 (- 1.0 u1))) (* u2 6.28318530718)))
                                          float code(float cosTheta_i, float u1, float u2) {
                                          	return sqrtf((u1 / (1.0f - u1))) * (u2 * 6.28318530718f);
                                          }
                                          
                                          real(4) function code(costheta_i, u1, u2)
                                              real(4), intent (in) :: costheta_i
                                              real(4), intent (in) :: u1
                                              real(4), intent (in) :: u2
                                              code = sqrt((u1 / (1.0e0 - u1))) * (u2 * 6.28318530718e0)
                                          end function
                                          
                                          function code(cosTheta_i, u1, u2)
                                          	return Float32(sqrt(Float32(u1 / Float32(Float32(1.0) - u1))) * Float32(u2 * Float32(6.28318530718)))
                                          end
                                          
                                          function tmp = code(cosTheta_i, u1, u2)
                                          	tmp = sqrt((u1 / (single(1.0) - u1))) * (u2 * single(6.28318530718));
                                          end
                                          
                                          \begin{array}{l}
                                          
                                          \\
                                          \sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)
                                          \end{array}
                                          
                                          Derivation
                                          1. Initial program 98.5%

                                            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                          2. Add Preprocessing
                                          3. Taylor expanded in u2 around 0

                                            \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                          4. Step-by-step derivation
                                            1. *-commutativeN/A

                                              \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                            2. associate-*l*N/A

                                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                            3. *-commutativeN/A

                                              \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                            4. lower-*.f32N/A

                                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                          5. Applied rewrites81.3%

                                            \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                          6. Add Preprocessing

                                          Alternative 20: 73.1% accurate, 5.0× speedup?

                                          \[\begin{array}{l} \\ \sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right) \end{array} \]
                                          (FPCore (cosTheta_i u1 u2)
                                           :precision binary32
                                           (* (sqrt (fma u1 u1 u1)) (* u2 6.28318530718)))
                                          float code(float cosTheta_i, float u1, float u2) {
                                          	return sqrtf(fmaf(u1, u1, u1)) * (u2 * 6.28318530718f);
                                          }
                                          
                                          function code(cosTheta_i, u1, u2)
                                          	return Float32(sqrt(fma(u1, u1, u1)) * Float32(u2 * Float32(6.28318530718)))
                                          end
                                          
                                          \begin{array}{l}
                                          
                                          \\
                                          \sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right)
                                          \end{array}
                                          
                                          Derivation
                                          1. Initial program 98.5%

                                            \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                          2. Add Preprocessing
                                          3. Taylor expanded in u2 around 0

                                            \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                          4. Step-by-step derivation
                                            1. *-commutativeN/A

                                              \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                            2. associate-*l*N/A

                                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                            3. *-commutativeN/A

                                              \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                            4. lower-*.f32N/A

                                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                          5. Applied rewrites81.3%

                                            \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                          6. Taylor expanded in u1 around 0

                                            \[\leadsto \sqrt{u1 \cdot \left(1 + u1\right)} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right) \]
                                          7. Step-by-step derivation
                                            1. Applied rewrites71.8%

                                              \[\leadsto \sqrt{\mathsf{fma}\left(u1, u1, u1\right)} \cdot \left(u2 \cdot 6.28318530718\right) \]
                                            2. Add Preprocessing

                                            Alternative 21: 64.4% accurate, 6.4× speedup?

                                            \[\begin{array}{l} \\ \left(\sqrt{u1} \cdot u2\right) \cdot 6.28318530718 \end{array} \]
                                            (FPCore (cosTheta_i u1 u2)
                                             :precision binary32
                                             (* (* (sqrt u1) u2) 6.28318530718))
                                            float code(float cosTheta_i, float u1, float u2) {
                                            	return (sqrtf(u1) * u2) * 6.28318530718f;
                                            }
                                            
                                            real(4) function code(costheta_i, u1, u2)
                                                real(4), intent (in) :: costheta_i
                                                real(4), intent (in) :: u1
                                                real(4), intent (in) :: u2
                                                code = (sqrt(u1) * u2) * 6.28318530718e0
                                            end function
                                            
                                            function code(cosTheta_i, u1, u2)
                                            	return Float32(Float32(sqrt(u1) * u2) * Float32(6.28318530718))
                                            end
                                            
                                            function tmp = code(cosTheta_i, u1, u2)
                                            	tmp = (sqrt(u1) * u2) * single(6.28318530718);
                                            end
                                            
                                            \begin{array}{l}
                                            
                                            \\
                                            \left(\sqrt{u1} \cdot u2\right) \cdot 6.28318530718
                                            \end{array}
                                            
                                            Derivation
                                            1. Initial program 98.5%

                                              \[\sqrt{\frac{u1}{1 - u1}} \cdot \sin \left(6.28318530718 \cdot u2\right) \]
                                            2. Add Preprocessing
                                            3. Taylor expanded in u2 around 0

                                              \[\leadsto \color{blue}{\frac{314159265359}{50000000000} \cdot \left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right)} \]
                                            4. Step-by-step derivation
                                              1. *-commutativeN/A

                                                \[\leadsto \color{blue}{\left(\sqrt{\frac{u1}{1 - u1}} \cdot u2\right) \cdot \frac{314159265359}{50000000000}} \]
                                              2. associate-*l*N/A

                                                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot \frac{314159265359}{50000000000}\right)} \]
                                              3. *-commutativeN/A

                                                \[\leadsto \sqrt{\frac{u1}{1 - u1}} \cdot \color{blue}{\left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                              4. lower-*.f32N/A

                                                \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(\frac{314159265359}{50000000000} \cdot u2\right)} \]
                                            5. Applied rewrites81.3%

                                              \[\leadsto \color{blue}{\sqrt{\frac{u1}{1 - u1}} \cdot \left(u2 \cdot 6.28318530718\right)} \]
                                            6. Taylor expanded in u1 around 0

                                              \[\leadsto \frac{314159265359}{50000000000} \cdot \color{blue}{\left(\sqrt{u1} \cdot u2\right)} \]
                                            7. Step-by-step derivation
                                              1. Applied rewrites63.5%

                                                \[\leadsto \left(u2 \cdot \sqrt{u1}\right) \cdot \color{blue}{6.28318530718} \]
                                              2. Final simplification63.5%

                                                \[\leadsto \left(\sqrt{u1} \cdot u2\right) \cdot 6.28318530718 \]
                                              3. Add Preprocessing

                                              Reproduce

                                              ?
                                              herbie shell --seed 2024235 
                                              (FPCore (cosTheta_i u1 u2)
                                                :name "Trowbridge-Reitz Sample, near normal, slope_y"
                                                :precision binary32
                                                :pre (and (and (and (> cosTheta_i 0.9999) (<= cosTheta_i 1.0)) (and (<= 2.328306437e-10 u1) (<= u1 1.0))) (and (<= 2.328306437e-10 u2) (<= u2 1.0)))
                                                (* (sqrt (/ u1 (- 1.0 u1))) (sin (* 6.28318530718 u2))))