HairBSDF, Mp, lower

Percentage Accurate: 99.7% → 99.7%
Time: 13.7s
Alternatives: 11
Speedup: N/A×

Specification

?
\[\left(\left(\left(\left(-1 \leq cosTheta\_i \land cosTheta\_i \leq 1\right) \land \left(-1 \leq cosTheta\_O \land cosTheta\_O \leq 1\right)\right) \land \left(-1 \leq sinTheta\_i \land sinTheta\_i \leq 1\right)\right) \land \left(-1 \leq sinTheta\_O \land sinTheta\_O \leq 1\right)\right) \land \left(-1.5707964 \leq v \land v \leq 0.1\right)\]
\[\begin{array}{l} \\ e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp
  (+
   (+
    (-
     (- (/ (* cosTheta_i cosTheta_O) v) (/ (* sinTheta_i sinTheta_O) v))
     (/ 1.0 v))
    0.6931)
   (log (/ 1.0 (* 2.0 v))))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf(((((((cosTheta_i * cosTheta_O) / v) - ((sinTheta_i * sinTheta_O) / v)) - (1.0f / v)) + 0.6931f) + logf((1.0f / (2.0f * v)))));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp(((((((costheta_i * costheta_o) / v) - ((sintheta_i * sintheta_o) / v)) - (1.0e0 / v)) + 0.6931e0) + log((1.0e0 / (2.0e0 * v)))))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(Float32(Float32(Float32(Float32(cosTheta_i * cosTheta_O) / v) - Float32(Float32(sinTheta_i * sinTheta_O) / v)) - Float32(Float32(1.0) / v)) + Float32(0.6931)) + log(Float32(Float32(1.0) / Float32(Float32(2.0) * v)))))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp(((((((cosTheta_i * cosTheta_O) / v) - ((sinTheta_i * sinTheta_O) / v)) - (single(1.0) / v)) + single(0.6931)) + log((single(1.0) / (single(2.0) * v)))));
end
\begin{array}{l}

\\
e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\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 11 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: 99.7% accurate, 1.0× speedup?

\[\begin{array}{l} \\ e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp
  (+
   (+
    (-
     (- (/ (* cosTheta_i cosTheta_O) v) (/ (* sinTheta_i sinTheta_O) v))
     (/ 1.0 v))
    0.6931)
   (log (/ 1.0 (* 2.0 v))))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf(((((((cosTheta_i * cosTheta_O) / v) - ((sinTheta_i * sinTheta_O) / v)) - (1.0f / v)) + 0.6931f) + logf((1.0f / (2.0f * v)))));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp(((((((costheta_i * costheta_o) / v) - ((sintheta_i * sintheta_o) / v)) - (1.0e0 / v)) + 0.6931e0) + log((1.0e0 / (2.0e0 * v)))))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(Float32(Float32(Float32(Float32(cosTheta_i * cosTheta_O) / v) - Float32(Float32(sinTheta_i * sinTheta_O) / v)) - Float32(Float32(1.0) / v)) + Float32(0.6931)) + log(Float32(Float32(1.0) / Float32(Float32(2.0) * v)))))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp(((((((cosTheta_i * cosTheta_O) / v) - ((sinTheta_i * sinTheta_O) / v)) - (single(1.0) / v)) + single(0.6931)) + log((single(1.0) / (single(2.0) * v)))));
end
\begin{array}{l}

\\
e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}
\end{array}

Alternative 1: 99.7% accurate, 1.1× speedup?

\[\begin{array}{l} \\ \frac{e^{\left(0.6931 + \frac{-1}{v}\right) + \log 0.5}}{v} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (/ (exp (+ (+ 0.6931 (/ -1.0 v)) (log 0.5))) v))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf(((0.6931f + (-1.0f / v)) + logf(0.5f))) / v;
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp(((0.6931e0 + ((-1.0e0) / v)) + log(0.5e0))) / v
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(exp(Float32(Float32(Float32(0.6931) + Float32(Float32(-1.0) / v)) + log(Float32(0.5)))) / v)
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp(((single(0.6931) + (single(-1.0) / v)) + log(single(0.5)))) / v;
end
\begin{array}{l}

\\
\frac{e^{\left(0.6931 + \frac{-1}{v}\right) + \log 0.5}}{v}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}}} \]
  7. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    8. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    9. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    10. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    11. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  8. Simplified99.8%

    \[\leadsto \color{blue}{e^{\log \left(\frac{0.5}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  9. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto e^{\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \left(\frac{\frac{1}{2}}{v}\right)} \]
    2. log-divN/A

      \[\leadsto e^{\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \left(\log \frac{1}{2} - \log v\right)} \]
    3. associate-+r-N/A

      \[\leadsto e^{\left(\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \frac{1}{2}\right) - \log v} \]
    4. exp-diffN/A

      \[\leadsto \frac{e^{\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \frac{1}{2}}}{\color{blue}{e^{\log v}}} \]
    5. rem-exp-logN/A

      \[\leadsto \frac{e^{\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \frac{1}{2}}}{v} \]
    6. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\left(e^{\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \frac{1}{2}}\right), \color{blue}{v}\right) \]
    7. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \frac{-1}{v}\right) + \log \frac{1}{2}\right)\right), v\right) \]
    8. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\frac{6931}{10000} + \frac{-1}{v}\right), \log \frac{1}{2}\right)\right), v\right) \]
    9. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right), \log \frac{1}{2}\right)\right), v\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right), \log \frac{1}{2}\right)\right), v\right) \]
    11. log-lowering-log.f3299.9%

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right), \mathsf{log.f32}\left(\frac{1}{2}\right)\right)\right), v\right) \]
  10. Applied egg-rr99.9%

    \[\leadsto \color{blue}{\frac{e^{\left(0.6931 + \frac{-1}{v}\right) + \log 0.5}}{v}} \]
  11. Add Preprocessing

Alternative 2: 99.7% accurate, 1.1× speedup?

\[\begin{array}{l} \\ \frac{0.5}{e^{\log v + \left(\frac{1}{v} + -0.6931\right)}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (/ 0.5 (exp (+ (log v) (+ (/ 1.0 v) -0.6931)))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return 0.5f / expf((logf(v) + ((1.0f / v) + -0.6931f)));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = 0.5e0 / exp((log(v) + ((1.0e0 / v) + (-0.6931e0))))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(Float32(0.5) / exp(Float32(log(v) + Float32(Float32(Float32(1.0) / v) + Float32(-0.6931)))))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = single(0.5) / exp((log(v) + ((single(1.0) / v) + single(-0.6931))));
end
\begin{array}{l}

\\
\frac{0.5}{e^{\log v + \left(\frac{1}{v} + -0.6931\right)}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Step-by-step derivation
    1. associate-+l+N/A

      \[\leadsto e^{\log \left(\frac{\frac{1}{2}}{v}\right) + \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)} \]
    2. log-divN/A

      \[\leadsto e^{\left(\log \frac{1}{2} - \log v\right) + \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)} \]
    3. associate-+l-N/A

      \[\leadsto e^{\log \frac{1}{2} - \left(\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)} \]
    4. exp-diffN/A

      \[\leadsto \frac{e^{\log \frac{1}{2}}}{\color{blue}{e^{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}}} \]
    5. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\left(e^{\log \frac{1}{2}}\right), \color{blue}{\left(e^{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}\right)}\right) \]
    6. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\log \frac{1}{2}\right), \left(e^{\color{blue}{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}}\right)\right) \]
    7. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \left(e^{\color{blue}{\log v} - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}\right)\right) \]
    8. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\left(\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    9. --lowering--.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\log v, \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    10. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    11. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    12. associate-*r/N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    13. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i\right), v\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    14. *-lowering-*.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    15. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right)\right)\right) \]
    16. /-lowering-/.f3299.9%

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right)\right)\right) \]
  7. Applied egg-rr99.9%

    \[\leadsto \color{blue}{\frac{e^{\log 0.5}}{e^{\log v - \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v} + \left(0.6931 + \frac{-1}{v}\right)\right)}}} \]
  8. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{\frac{\frac{1}{2}}{e^{\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}}}} \]
  9. Step-by-step derivation
    1. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \color{blue}{\left(e^{\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}}\right)}\right) \]
    2. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\left(\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}\right)\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\left(\log v + \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\log v, \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    5. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    6. sub-negN/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \left(\frac{1}{v} + \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    7. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(\frac{1}{v}\right), \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    8. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(1, v\right), \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    9. metadata-eval99.9%

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(1, v\right), \frac{-6931}{10000}\right)\right)\right)\right) \]
  10. Simplified99.9%

    \[\leadsto \color{blue}{\frac{0.5}{e^{\log v + \left(\frac{1}{v} + -0.6931\right)}}} \]
  11. Add Preprocessing

Alternative 3: 99.7% accurate, 1.1× speedup?

\[\begin{array}{l} \\ e^{\left(0.6931 + \frac{-1}{v}\right) + \log \left(\frac{0.5}{v}\right)} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp (+ (+ 0.6931 (/ -1.0 v)) (log (/ 0.5 v)))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf(((0.6931f + (-1.0f / v)) + logf((0.5f / v))));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp(((0.6931e0 + ((-1.0e0) / v)) + log((0.5e0 / v))))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(Float32(0.6931) + Float32(Float32(-1.0) / v)) + log(Float32(Float32(0.5) / v))))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp(((single(0.6931) + (single(-1.0) / v)) + log((single(0.5) / v))));
end
\begin{array}{l}

\\
e^{\left(0.6931 + \frac{-1}{v}\right) + \log \left(\frac{0.5}{v}\right)}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}}} \]
  7. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    8. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    9. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    10. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    11. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  8. Simplified99.8%

    \[\leadsto \color{blue}{e^{\log \left(\frac{0.5}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  9. Final simplification99.8%

    \[\leadsto e^{\left(0.6931 + \frac{-1}{v}\right) + \log \left(\frac{0.5}{v}\right)} \]
  10. Add Preprocessing

Alternative 4: 99.7% accurate, 2.0× speedup?

\[\begin{array}{l} \\ \frac{\frac{0.5}{v}}{e^{\frac{1}{v} + -0.6931}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (/ (/ 0.5 v) (exp (+ (/ 1.0 v) -0.6931))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return (0.5f / v) / expf(((1.0f / v) + -0.6931f));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = (0.5e0 / v) / exp(((1.0e0 / v) + (-0.6931e0)))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(Float32(Float32(0.5) / v) / exp(Float32(Float32(Float32(1.0) / v) + Float32(-0.6931))))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = (single(0.5) / v) / exp(((single(1.0) / v) + single(-0.6931)));
end
\begin{array}{l}

\\
\frac{\frac{0.5}{v}}{e^{\frac{1}{v} + -0.6931}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Step-by-step derivation
    1. associate-+l+N/A

      \[\leadsto e^{\log \left(\frac{\frac{1}{2}}{v}\right) + \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)} \]
    2. log-divN/A

      \[\leadsto e^{\left(\log \frac{1}{2} - \log v\right) + \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)} \]
    3. associate-+l-N/A

      \[\leadsto e^{\log \frac{1}{2} - \left(\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)} \]
    4. exp-diffN/A

      \[\leadsto \frac{e^{\log \frac{1}{2}}}{\color{blue}{e^{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}}} \]
    5. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\left(e^{\log \frac{1}{2}}\right), \color{blue}{\left(e^{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}\right)}\right) \]
    6. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\log \frac{1}{2}\right), \left(e^{\color{blue}{\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}}\right)\right) \]
    7. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \left(e^{\color{blue}{\log v} - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)}\right)\right) \]
    8. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\left(\log v - \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    9. --lowering--.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\log v, \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    10. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v} + \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    11. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    12. associate-*r/N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    13. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i\right), v\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    14. *-lowering-*.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \left(\frac{6931}{10000} + \frac{-1}{v}\right)\right)\right)\right)\right) \]
    15. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right)\right)\right) \]
    16. /-lowering-/.f3299.9%

      \[\leadsto \mathsf{/.f32}\left(\mathsf{exp.f32}\left(\mathsf{log.f32}\left(\frac{1}{2}\right)\right), \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right)\right)\right) \]
  7. Applied egg-rr99.9%

    \[\leadsto \color{blue}{\frac{e^{\log 0.5}}{e^{\log v - \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v} + \left(0.6931 + \frac{-1}{v}\right)\right)}}} \]
  8. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{\frac{\frac{1}{2}}{e^{\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}}}} \]
  9. Step-by-step derivation
    1. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \color{blue}{\left(e^{\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}}\right)}\right) \]
    2. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\left(\left(\log v + \frac{1}{v}\right) - \frac{6931}{10000}\right)\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\left(\log v + \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\log v, \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    5. log-lowering-log.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \left(\frac{1}{v} - \frac{6931}{10000}\right)\right)\right)\right) \]
    6. sub-negN/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \left(\frac{1}{v} + \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    7. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\left(\frac{1}{v}\right), \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    8. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(1, v\right), \left(\mathsf{neg}\left(\frac{6931}{10000}\right)\right)\right)\right)\right)\right) \]
    9. metadata-eval99.9%

      \[\leadsto \mathsf{/.f32}\left(\frac{1}{2}, \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(v\right), \mathsf{+.f32}\left(\mathsf{/.f32}\left(1, v\right), \frac{-6931}{10000}\right)\right)\right)\right) \]
  10. Simplified99.9%

    \[\leadsto \color{blue}{\frac{0.5}{e^{\log v + \left(\frac{1}{v} + -0.6931\right)}}} \]
  11. Step-by-step derivation
    1. exp-sumN/A

      \[\leadsto \frac{\frac{1}{2}}{e^{\log v} \cdot \color{blue}{e^{\frac{1}{v} + \frac{-6931}{10000}}}} \]
    2. rem-exp-logN/A

      \[\leadsto \frac{\frac{1}{2}}{v \cdot e^{\color{blue}{\frac{1}{v} + \frac{-6931}{10000}}}} \]
    3. associate-/r*N/A

      \[\leadsto \frac{\frac{\frac{1}{2}}{v}}{\color{blue}{e^{\frac{1}{v} + \frac{-6931}{10000}}}} \]
    4. rem-exp-logN/A

      \[\leadsto \frac{e^{\log \left(\frac{\frac{1}{2}}{v}\right)}}{e^{\color{blue}{\frac{1}{v} + \frac{-6931}{10000}}}} \]
    5. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\left(e^{\log \left(\frac{\frac{1}{2}}{v}\right)}\right), \color{blue}{\left(e^{\frac{1}{v} + \frac{-6931}{10000}}\right)}\right) \]
    6. rem-exp-logN/A

      \[\leadsto \mathsf{/.f32}\left(\left(\frac{\frac{1}{2}}{v}\right), \left(e^{\color{blue}{\frac{1}{v} + \frac{-6931}{10000}}}\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right), \left(e^{\color{blue}{\frac{1}{v} + \frac{-6931}{10000}}}\right)\right) \]
    8. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right), \mathsf{exp.f32}\left(\left(\frac{1}{v} + \frac{-6931}{10000}\right)\right)\right) \]
    9. +-lowering-+.f32N/A

      \[\leadsto \mathsf{/.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right), \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\frac{1}{v}\right), \frac{-6931}{10000}\right)\right)\right) \]
    10. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{/.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right), \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{/.f32}\left(1, v\right), \frac{-6931}{10000}\right)\right)\right) \]
  12. Applied egg-rr99.8%

    \[\leadsto \color{blue}{\frac{\frac{0.5}{v}}{e^{\frac{1}{v} + -0.6931}}} \]
  13. Add Preprocessing

Alternative 5: 98.2% accurate, 2.1× speedup?

\[\begin{array}{l} \\ e^{\frac{-1 + 0.6931 \cdot v}{v}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp (/ (+ -1.0 (* 0.6931 v)) v)))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf(((-1.0f + (0.6931f * v)) / v));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp((((-1.0e0) + (0.6931e0 * v)) / v))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(Float32(-1.0) + Float32(Float32(0.6931) * v)) / v))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp(((single(-1.0) + (single(0.6931) * v)) / v));
end
\begin{array}{l}

\\
e^{\frac{-1 + 0.6931 \cdot v}{v}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Taylor expanded in v around 0

    \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\color{blue}{\left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)}, \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  7. Step-by-step derivation
    1. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{/.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
    2. *-lowering-*.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  8. Simplified98.5%

    \[\leadsto e^{\color{blue}{\frac{cosTheta\_O \cdot cosTheta\_i}{v}} + \left(0.6931 + \frac{-1}{v}\right)} \]
  9. Taylor expanded in v around 0

    \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(\frac{\left(\frac{6931}{10000} \cdot v + cosTheta\_O \cdot cosTheta\_i\right) - 1}{v}\right)}\right) \]
  10. Step-by-step derivation
    1. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(\left(\frac{6931}{10000} \cdot v + cosTheta\_O \cdot cosTheta\_i\right) - 1\right), v\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(\left(cosTheta\_O \cdot cosTheta\_i + \frac{6931}{10000} \cdot v\right) - 1\right), v\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i + \left(\frac{6931}{10000} \cdot v - 1\right)\right), v\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i\right), \left(\frac{6931}{10000} \cdot v - 1\right)\right), v\right)\right) \]
    5. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \left(\frac{6931}{10000} \cdot v - 1\right)\right), v\right)\right) \]
    6. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \left(\frac{6931}{10000} \cdot v + \left(\mathsf{neg}\left(1\right)\right)\right)\right), v\right)\right) \]
    7. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \left(\frac{6931}{10000} \cdot v + -1\right)\right), v\right)\right) \]
    8. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \left(-1 + \frac{6931}{10000} \cdot v\right)\right), v\right)\right) \]
    9. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \mathsf{+.f32}\left(-1, \left(\frac{6931}{10000} \cdot v\right)\right)\right), v\right)\right) \]
    10. *-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \mathsf{+.f32}\left(-1, \left(v \cdot \frac{6931}{10000}\right)\right)\right), v\right)\right) \]
    11. *-lowering-*.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), \mathsf{+.f32}\left(-1, \mathsf{*.f32}\left(v, \frac{6931}{10000}\right)\right)\right), v\right)\right) \]
  11. Simplified98.5%

    \[\leadsto e^{\color{blue}{\frac{cosTheta\_O \cdot cosTheta\_i + \left(-1 + v \cdot 0.6931\right)}{v}}} \]
  12. Taylor expanded in cosTheta_O around 0

    \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\color{blue}{\left(\frac{6931}{10000} \cdot v - 1\right)}, v\right)\right) \]
  13. Step-by-step derivation
    1. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(\frac{6931}{10000} \cdot v + \left(\mathsf{neg}\left(1\right)\right)\right), v\right)\right) \]
    2. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(\frac{6931}{10000} \cdot v + -1\right), v\right)\right) \]
    3. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\left(-1 + \frac{6931}{10000} \cdot v\right), v\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(-1, \left(\frac{6931}{10000} \cdot v\right)\right), v\right)\right) \]
    5. *-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(-1, \left(v \cdot \frac{6931}{10000}\right)\right), v\right)\right) \]
    6. *-lowering-*.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(\mathsf{+.f32}\left(-1, \mathsf{*.f32}\left(v, \frac{6931}{10000}\right)\right), v\right)\right) \]
  14. Simplified98.5%

    \[\leadsto e^{\frac{\color{blue}{-1 + v \cdot 0.6931}}{v}} \]
  15. Final simplification98.5%

    \[\leadsto e^{\frac{-1 + 0.6931 \cdot v}{v}} \]
  16. Add Preprocessing

Alternative 6: 98.2% accurate, 2.1× speedup?

\[\begin{array}{l} \\ e^{0.6931 + \frac{-1}{v}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp (+ 0.6931 (/ -1.0 v))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf((0.6931f + (-1.0f / v)));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp((0.6931e0 + ((-1.0e0) / v)))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(0.6931) + Float32(Float32(-1.0) / v)))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp((single(0.6931) + (single(-1.0) / v)));
end
\begin{array}{l}

\\
e^{0.6931 + \frac{-1}{v}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Taylor expanded in v around 0

    \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\color{blue}{\left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)}, \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  7. Step-by-step derivation
    1. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{/.f32}\left(\left(cosTheta\_O \cdot cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
    2. *-lowering-*.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, cosTheta\_i\right), v\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  8. Simplified98.5%

    \[\leadsto e^{\color{blue}{\frac{cosTheta\_O \cdot cosTheta\_i}{v}} + \left(0.6931 + \frac{-1}{v}\right)} \]
  9. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{e^{\frac{6931}{10000} - \frac{1}{v}}} \]
  10. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\frac{6931}{10000} - \frac{1}{v}\right)\right) \]
    2. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right) \]
    3. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right) \]
    4. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right) \]
    5. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right) \]
    6. /-lowering-/.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right) \]
  11. Simplified98.5%

    \[\leadsto \color{blue}{e^{0.6931 + \frac{-1}{v}}} \]
  12. Add Preprocessing

Alternative 7: 98.2% accurate, 2.2× speedup?

\[\begin{array}{l} \\ e^{\frac{-1}{v}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp (/ -1.0 v)))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf((-1.0f / v));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = exp(((-1.0e0) / v))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return exp(Float32(Float32(-1.0) / v))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = exp((single(-1.0) / v));
end
\begin{array}{l}

\\
e^{\frac{-1}{v}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}}} \]
  4. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{cosTheta\_O \cdot cosTheta\_i}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    9. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    10. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    11. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    12. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    13. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    14. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    15. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  5. Simplified99.8%

    \[\leadsto \color{blue}{e^{\left(\log \left(\frac{0.5}{v}\right) + cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  6. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{e^{\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}}} \]
  7. Step-by-step derivation
    1. exp-lowering-exp.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\frac{6931}{10000} + \log \left(\frac{\frac{1}{2}}{v}\right)\right) - \frac{1}{v}\right)\right) \]
    2. +-commutativeN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \frac{6931}{10000}\right) - \frac{1}{v}\right)\right) \]
    3. associate--l+N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\log \left(\frac{\frac{1}{2}}{v}\right) + \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    4. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\log \left(\frac{\frac{1}{2}}{v}\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    5. log-lowering-log.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\left(\frac{\frac{1}{2}}{v}\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    6. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} - \frac{1}{v}\right)\right)\right) \]
    7. sub-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \left(\frac{6931}{10000} + \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    8. +-lowering-+.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\mathsf{neg}\left(\frac{1}{v}\right)\right)\right)\right)\right) \]
    9. distribute-neg-fracN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{\mathsf{neg}\left(1\right)}{v}\right)\right)\right)\right) \]
    10. metadata-evalN/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \left(\frac{-1}{v}\right)\right)\right)\right) \]
    11. /-lowering-/.f3299.8%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{+.f32}\left(\mathsf{log.f32}\left(\mathsf{/.f32}\left(\frac{1}{2}, v\right)\right), \mathsf{+.f32}\left(\frac{6931}{10000}, \mathsf{/.f32}\left(-1, v\right)\right)\right)\right) \]
  8. Simplified99.8%

    \[\leadsto \color{blue}{e^{\log \left(\frac{0.5}{v}\right) + \left(0.6931 + \frac{-1}{v}\right)}} \]
  9. Taylor expanded in v around 0

    \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(\frac{-1}{v}\right)}\right) \]
  10. Step-by-step derivation
    1. /-lowering-/.f3298.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{/.f32}\left(-1, v\right)\right) \]
  11. Simplified98.5%

    \[\leadsto e^{\color{blue}{\frac{-1}{v}}} \]
  12. Add Preprocessing

Alternative 8: 42.2% accurate, 9.3× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}\\ t_1 := \frac{v}{sinTheta\_i \cdot sinTheta\_O}\\ \mathbf{if}\;sinTheta\_i \leq -2.00000006274879 \cdot 10^{-22}:\\ \;\;\;\;\frac{\frac{t\_0}{t\_1}}{0 - t\_0}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{t\_1}\\ \end{array} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (let* ((t_0 (/ sinTheta_i (/ v sinTheta_O)))
        (t_1 (/ v (* sinTheta_i sinTheta_O))))
   (if (<= sinTheta_i -2.00000006274879e-22)
     (/ (/ t_0 t_1) (- 0.0 t_0))
     (/ -1.0 t_1))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	float t_0 = sinTheta_i / (v / sinTheta_O);
	float t_1 = v / (sinTheta_i * sinTheta_O);
	float tmp;
	if (sinTheta_i <= -2.00000006274879e-22f) {
		tmp = (t_0 / t_1) / (0.0f - t_0);
	} else {
		tmp = -1.0f / t_1;
	}
	return tmp;
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    real(4) :: t_0
    real(4) :: t_1
    real(4) :: tmp
    t_0 = sintheta_i / (v / sintheta_o)
    t_1 = v / (sintheta_i * sintheta_o)
    if (sintheta_i <= (-2.00000006274879e-22)) then
        tmp = (t_0 / t_1) / (0.0e0 - t_0)
    else
        tmp = (-1.0e0) / t_1
    end if
    code = tmp
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	t_0 = Float32(sinTheta_i / Float32(v / sinTheta_O))
	t_1 = Float32(v / Float32(sinTheta_i * sinTheta_O))
	tmp = Float32(0.0)
	if (sinTheta_i <= Float32(-2.00000006274879e-22))
		tmp = Float32(Float32(t_0 / t_1) / Float32(Float32(0.0) - t_0));
	else
		tmp = Float32(Float32(-1.0) / t_1);
	end
	return tmp
end
function tmp_2 = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	t_0 = sinTheta_i / (v / sinTheta_O);
	t_1 = v / (sinTheta_i * sinTheta_O);
	tmp = single(0.0);
	if (sinTheta_i <= single(-2.00000006274879e-22))
		tmp = (t_0 / t_1) / (single(0.0) - t_0);
	else
		tmp = single(-1.0) / t_1;
	end
	tmp_2 = tmp;
end
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}\\
t_1 := \frac{v}{sinTheta\_i \cdot sinTheta\_O}\\
\mathbf{if}\;sinTheta\_i \leq -2.00000006274879 \cdot 10^{-22}:\\
\;\;\;\;\frac{\frac{t\_0}{t\_1}}{0 - t\_0}\\

\mathbf{else}:\\
\;\;\;\;\frac{-1}{t\_1}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if sinTheta_i < -2.00000006e-22

    1. Initial program 99.7%

      \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in sinTheta_i around inf

      \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{exp.f32}\left(\left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
      2. neg-sub0N/A

        \[\leadsto \mathsf{exp.f32}\left(\left(0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      3. --lowering--.f32N/A

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
      4. /-lowering-/.f32N/A

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right)\right) \]
      5. *-lowering-*.f3212.5%

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right)\right) \]
    5. Simplified12.5%

      \[\leadsto e^{\color{blue}{0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}}} \]
    6. Taylor expanded in sinTheta_O around 0

      \[\leadsto \color{blue}{1 + -1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    7. Step-by-step derivation
      1. neg-mul-1N/A

        \[\leadsto 1 + \left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      2. unsub-negN/A

        \[\leadsto 1 - \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
      3. --lowering--.f32N/A

        \[\leadsto \mathsf{\_.f32}\left(1, \color{blue}{\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
      4. /-lowering-/.f32N/A

        \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), \color{blue}{v}\right)\right) \]
      5. *-lowering-*.f326.0%

        \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
    8. Simplified6.0%

      \[\leadsto \color{blue}{1 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    9. Taylor expanded in sinTheta_O around inf

      \[\leadsto \color{blue}{-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    10. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right) \]
      2. neg-lowering-neg.f32N/A

        \[\leadsto \mathsf{neg.f32}\left(\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      3. /-lowering-/.f32N/A

        \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right) \]
      4. *-lowering-*.f3221.0%

        \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
    11. Simplified21.0%

      \[\leadsto \color{blue}{-\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    12. Step-by-step derivation
      1. neg-sub0N/A

        \[\leadsto 0 - \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
      2. *-commutativeN/A

        \[\leadsto 0 - \frac{sinTheta\_i \cdot sinTheta\_O}{v} \]
      3. associate-*r/N/A

        \[\leadsto 0 - sinTheta\_i \cdot \color{blue}{\frac{sinTheta\_O}{v}} \]
      4. flip--N/A

        \[\leadsto \frac{0 \cdot 0 - \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)}{\color{blue}{0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}}} \]
      5. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\left(0 \cdot 0 - \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right), \color{blue}{\left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)}\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{/.f32}\left(\left(0 - \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      7. --lowering--.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \left(\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right)\right), \left(\color{blue}{0} + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      8. associate-*r/N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \left(\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      9. *-commutativeN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \left(\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      10. clear-numN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \left(\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right) \cdot \frac{1}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      11. un-div-invN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \left(\frac{sinTheta\_i \cdot \frac{sinTheta\_O}{v}}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      12. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right), \left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      13. clear-numN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_i \cdot \frac{1}{\frac{v}{sinTheta\_O}}\right), \left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      14. un-div-invN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(\frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}\right), \left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      15. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \left(\frac{v}{sinTheta\_O}\right)\right), \left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      16. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \mathsf{/.f32}\left(v, sinTheta\_O\right)\right), \left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      17. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \mathsf{/.f32}\left(v, sinTheta\_O\right)\right), \mathsf{/.f32}\left(v, \left(sinTheta\_O \cdot sinTheta\_i\right)\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      18. *-lowering-*.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \mathsf{/.f32}\left(v, sinTheta\_O\right)\right), \mathsf{/.f32}\left(v, \mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right)\right)\right)\right), \left(0 + sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)\right) \]
      19. +-lowering-+.f32N/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \mathsf{/.f32}\left(v, sinTheta\_O\right)\right), \mathsf{/.f32}\left(v, \mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right)\right)\right)\right), \mathsf{+.f32}\left(0, \color{blue}{\left(sinTheta\_i \cdot \frac{sinTheta\_O}{v}\right)}\right)\right) \]
      20. clear-numN/A

        \[\leadsto \mathsf{/.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{/.f32}\left(sinTheta\_i, \mathsf{/.f32}\left(v, sinTheta\_O\right)\right), \mathsf{/.f32}\left(v, \mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right)\right)\right)\right), \mathsf{+.f32}\left(0, \left(sinTheta\_i \cdot \frac{1}{\color{blue}{\frac{v}{sinTheta\_O}}}\right)\right)\right) \]
    13. Applied egg-rr30.7%

      \[\leadsto \color{blue}{\frac{0 - \frac{\frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}}{0 + \frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}}} \]

    if -2.00000006e-22 < sinTheta_i

    1. Initial program 99.8%

      \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in sinTheta_i around inf

      \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{exp.f32}\left(\left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
      2. neg-sub0N/A

        \[\leadsto \mathsf{exp.f32}\left(\left(0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      3. --lowering--.f32N/A

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
      4. /-lowering-/.f32N/A

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right)\right) \]
      5. *-lowering-*.f3212.4%

        \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right)\right) \]
    5. Simplified12.4%

      \[\leadsto e^{\color{blue}{0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}}} \]
    6. Taylor expanded in sinTheta_O around 0

      \[\leadsto \color{blue}{1 + -1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    7. Step-by-step derivation
      1. neg-mul-1N/A

        \[\leadsto 1 + \left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      2. unsub-negN/A

        \[\leadsto 1 - \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
      3. --lowering--.f32N/A

        \[\leadsto \mathsf{\_.f32}\left(1, \color{blue}{\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
      4. /-lowering-/.f32N/A

        \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), \color{blue}{v}\right)\right) \]
      5. *-lowering-*.f326.3%

        \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
    8. Simplified6.3%

      \[\leadsto \color{blue}{1 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    9. Taylor expanded in sinTheta_O around inf

      \[\leadsto \color{blue}{-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    10. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right) \]
      2. neg-lowering-neg.f32N/A

        \[\leadsto \mathsf{neg.f32}\left(\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
      3. /-lowering-/.f32N/A

        \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right) \]
      4. *-lowering-*.f3250.7%

        \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
    11. Simplified50.7%

      \[\leadsto \color{blue}{-\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    12. Step-by-step derivation
      1. neg-mul-1N/A

        \[\leadsto -1 \cdot \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
      2. clear-numN/A

        \[\leadsto -1 \cdot \frac{1}{\color{blue}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
      3. un-div-invN/A

        \[\leadsto \frac{-1}{\color{blue}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
      4. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(-1, \color{blue}{\left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)}\right) \]
      5. /-lowering-/.f32N/A

        \[\leadsto \mathsf{/.f32}\left(-1, \mathsf{/.f32}\left(v, \color{blue}{\left(sinTheta\_O \cdot sinTheta\_i\right)}\right)\right) \]
      6. *-lowering-*.f3251.0%

        \[\leadsto \mathsf{/.f32}\left(-1, \mathsf{/.f32}\left(v, \mathsf{*.f32}\left(sinTheta\_O, \color{blue}{sinTheta\_i}\right)\right)\right) \]
    13. Applied egg-rr51.0%

      \[\leadsto \color{blue}{\frac{-1}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification46.4%

    \[\leadsto \begin{array}{l} \mathbf{if}\;sinTheta\_i \leq -2.00000006274879 \cdot 10^{-22}:\\ \;\;\;\;\frac{\frac{\frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}}{\frac{v}{sinTheta\_i \cdot sinTheta\_O}}}{0 - \frac{sinTheta\_i}{\frac{v}{sinTheta\_O}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{\frac{v}{sinTheta\_i \cdot sinTheta\_O}}\\ \end{array} \]
  5. Add Preprocessing

Alternative 9: 39.2% accurate, 31.9× speedup?

\[\begin{array}{l} \\ \frac{-1}{\frac{v}{sinTheta\_i \cdot sinTheta\_O}} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (/ -1.0 (/ v (* sinTheta_i sinTheta_O))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return -1.0f / (v / (sinTheta_i * sinTheta_O));
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = (-1.0e0) / (v / (sintheta_i * sintheta_o))
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(Float32(-1.0) / Float32(v / Float32(sinTheta_i * sinTheta_O)))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = single(-1.0) / (v / (sinTheta_i * sinTheta_O));
end
\begin{array}{l}

\\
\frac{-1}{\frac{v}{sinTheta\_i \cdot sinTheta\_O}}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around inf

    \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
  4. Step-by-step derivation
    1. mul-1-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
    2. neg-sub0N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    3. --lowering--.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
    4. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right)\right) \]
    5. *-lowering-*.f3212.4%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right)\right) \]
  5. Simplified12.4%

    \[\leadsto e^{\color{blue}{0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}}} \]
  6. Taylor expanded in sinTheta_O around 0

    \[\leadsto \color{blue}{1 + -1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  7. Step-by-step derivation
    1. neg-mul-1N/A

      \[\leadsto 1 + \left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    2. unsub-negN/A

      \[\leadsto 1 - \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    3. --lowering--.f32N/A

      \[\leadsto \mathsf{\_.f32}\left(1, \color{blue}{\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
    4. /-lowering-/.f32N/A

      \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), \color{blue}{v}\right)\right) \]
    5. *-lowering-*.f326.2%

      \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
  8. Simplified6.2%

    \[\leadsto \color{blue}{1 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  9. Taylor expanded in sinTheta_O around inf

    \[\leadsto \color{blue}{-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  10. Step-by-step derivation
    1. mul-1-negN/A

      \[\leadsto \mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right) \]
    2. neg-lowering-neg.f32N/A

      \[\leadsto \mathsf{neg.f32}\left(\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    3. /-lowering-/.f32N/A

      \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right) \]
    4. *-lowering-*.f3243.9%

      \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
  11. Simplified43.9%

    \[\leadsto \color{blue}{-\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  12. Step-by-step derivation
    1. neg-mul-1N/A

      \[\leadsto -1 \cdot \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    2. clear-numN/A

      \[\leadsto -1 \cdot \frac{1}{\color{blue}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
    3. un-div-invN/A

      \[\leadsto \frac{-1}{\color{blue}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
    4. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(-1, \color{blue}{\left(\frac{v}{sinTheta\_O \cdot sinTheta\_i}\right)}\right) \]
    5. /-lowering-/.f32N/A

      \[\leadsto \mathsf{/.f32}\left(-1, \mathsf{/.f32}\left(v, \color{blue}{\left(sinTheta\_O \cdot sinTheta\_i\right)}\right)\right) \]
    6. *-lowering-*.f3244.2%

      \[\leadsto \mathsf{/.f32}\left(-1, \mathsf{/.f32}\left(v, \mathsf{*.f32}\left(sinTheta\_O, \color{blue}{sinTheta\_i}\right)\right)\right) \]
  13. Applied egg-rr44.2%

    \[\leadsto \color{blue}{\frac{-1}{\frac{v}{sinTheta\_O \cdot sinTheta\_i}}} \]
  14. Final simplification44.2%

    \[\leadsto \frac{-1}{\frac{v}{sinTheta\_i \cdot sinTheta\_O}} \]
  15. Add Preprocessing

Alternative 10: 38.9% accurate, 31.9× speedup?

\[\begin{array}{l} \\ 0 - \frac{sinTheta\_i \cdot sinTheta\_O}{v} \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (- 0.0 (/ (* sinTheta_i sinTheta_O) v)))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return 0.0f - ((sinTheta_i * sinTheta_O) / v);
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = 0.0e0 - ((sintheta_i * sintheta_o) / v)
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(Float32(0.0) - Float32(Float32(sinTheta_i * sinTheta_O) / v))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = single(0.0) - ((sinTheta_i * sinTheta_O) / v);
end
\begin{array}{l}

\\
0 - \frac{sinTheta\_i \cdot sinTheta\_O}{v}
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in sinTheta_i around inf

    \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
  4. Step-by-step derivation
    1. mul-1-negN/A

      \[\leadsto \mathsf{exp.f32}\left(\left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
    2. neg-sub0N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    3. --lowering--.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right)\right) \]
    4. /-lowering-/.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right)\right) \]
    5. *-lowering-*.f3212.4%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{\_.f32}\left(0, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right)\right) \]
  5. Simplified12.4%

    \[\leadsto e^{\color{blue}{0 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}}} \]
  6. Taylor expanded in sinTheta_O around 0

    \[\leadsto \color{blue}{1 + -1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  7. Step-by-step derivation
    1. neg-mul-1N/A

      \[\leadsto 1 + \left(\mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    2. unsub-negN/A

      \[\leadsto 1 - \color{blue}{\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
    3. --lowering--.f32N/A

      \[\leadsto \mathsf{\_.f32}\left(1, \color{blue}{\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)}\right) \]
    4. /-lowering-/.f32N/A

      \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), \color{blue}{v}\right)\right) \]
    5. *-lowering-*.f326.2%

      \[\leadsto \mathsf{\_.f32}\left(1, \mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
  8. Simplified6.2%

    \[\leadsto \color{blue}{1 - \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  9. Taylor expanded in sinTheta_O around inf

    \[\leadsto \color{blue}{-1 \cdot \frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  10. Step-by-step derivation
    1. mul-1-negN/A

      \[\leadsto \mathsf{neg}\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right) \]
    2. neg-lowering-neg.f32N/A

      \[\leadsto \mathsf{neg.f32}\left(\left(\frac{sinTheta\_O \cdot sinTheta\_i}{v}\right)\right) \]
    3. /-lowering-/.f32N/A

      \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\left(sinTheta\_O \cdot sinTheta\_i\right), v\right)\right) \]
    4. *-lowering-*.f3243.9%

      \[\leadsto \mathsf{neg.f32}\left(\mathsf{/.f32}\left(\mathsf{*.f32}\left(sinTheta\_O, sinTheta\_i\right), v\right)\right) \]
  11. Simplified43.9%

    \[\leadsto \color{blue}{-\frac{sinTheta\_O \cdot sinTheta\_i}{v}} \]
  12. Final simplification43.9%

    \[\leadsto 0 - \frac{sinTheta\_i \cdot sinTheta\_O}{v} \]
  13. Add Preprocessing

Alternative 11: 6.4% accurate, 223.0× speedup?

\[\begin{array}{l} \\ 1 \end{array} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 1.0)
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return 1.0f;
}
real(4) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(4), intent (in) :: costheta_i
    real(4), intent (in) :: costheta_o
    real(4), intent (in) :: sintheta_i
    real(4), intent (in) :: sintheta_o
    real(4), intent (in) :: v
    code = 1.0e0
end function
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float32(1.0)
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = single(1.0);
end
\begin{array}{l}

\\
1
\end{array}
Derivation
  1. Initial program 99.8%

    \[e^{\left(\left(\left(\frac{cosTheta\_i \cdot cosTheta\_O}{v} - \frac{sinTheta\_i \cdot sinTheta\_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in cosTheta_i around inf

    \[\leadsto \mathsf{exp.f32}\left(\color{blue}{\left(\frac{cosTheta\_O \cdot cosTheta\_i}{v}\right)}\right) \]
  4. Step-by-step derivation
    1. associate-/l*N/A

      \[\leadsto \mathsf{exp.f32}\left(\left(cosTheta\_O \cdot \frac{cosTheta\_i}{v}\right)\right) \]
    2. *-lowering-*.f32N/A

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, \left(\frac{cosTheta\_i}{v}\right)\right)\right) \]
    3. /-lowering-/.f329.5%

      \[\leadsto \mathsf{exp.f32}\left(\mathsf{*.f32}\left(cosTheta\_O, \mathsf{/.f32}\left(cosTheta\_i, v\right)\right)\right) \]
  5. Simplified9.5%

    \[\leadsto e^{\color{blue}{cosTheta\_O \cdot \frac{cosTheta\_i}{v}}} \]
  6. Taylor expanded in cosTheta_O around 0

    \[\leadsto \color{blue}{1} \]
  7. Step-by-step derivation
    1. Simplified6.4%

      \[\leadsto \color{blue}{1} \]
    2. Add Preprocessing

    Reproduce

    ?
    herbie shell --seed 2024158 
    (FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
      :name "HairBSDF, Mp, lower"
      :precision binary32
      :pre (and (and (and (and (and (<= -1.0 cosTheta_i) (<= cosTheta_i 1.0)) (and (<= -1.0 cosTheta_O) (<= cosTheta_O 1.0))) (and (<= -1.0 sinTheta_i) (<= sinTheta_i 1.0))) (and (<= -1.0 sinTheta_O) (<= sinTheta_O 1.0))) (and (<= -1.5707964 v) (<= v 0.1)))
      (exp (+ (+ (- (- (/ (* cosTheta_i cosTheta_O) v) (/ (* sinTheta_i sinTheta_O) v)) (/ 1.0 v)) 0.6931) (log (/ 1.0 (* 2.0 v))))))