HairBSDF, sample_f, cosTheta

Percentage Accurate: 99.5% → 99.4%
Time: 10.8s
Alternatives: 11
Speedup: 1.0×

Specification

?
\[\left(10^{-5} \leq u \land u \leq 1\right) \land \left(0 \leq v \land v \leq 109.746574\right)\]
\[\begin{array}{l} \\ 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (+ 1.0 (* v (log (+ u (* (- 1.0 u) (exp (/ -2.0 v))))))))
float code(float u, float v) {
	return 1.0f + (v * logf((u + ((1.0f - u) * expf((-2.0f / v))))));
}
real(4) function code(u, v)
    real(4), intent (in) :: u
    real(4), intent (in) :: v
    code = 1.0e0 + (v * log((u + ((1.0e0 - u) * exp(((-2.0e0) / v))))))
end function
function code(u, v)
	return Float32(Float32(1.0) + Float32(v * log(Float32(u + Float32(Float32(Float32(1.0) - u) * exp(Float32(Float32(-2.0) / v)))))))
end
function tmp = code(u, v)
	tmp = single(1.0) + (v * log((u + ((single(1.0) - u) * exp((single(-2.0) / v))))));
end
\begin{array}{l}

\\
1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{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.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (+ 1.0 (* v (log (+ u (* (- 1.0 u) (exp (/ -2.0 v))))))))
float code(float u, float v) {
	return 1.0f + (v * logf((u + ((1.0f - u) * expf((-2.0f / v))))));
}
real(4) function code(u, v)
    real(4), intent (in) :: u
    real(4), intent (in) :: v
    code = 1.0e0 + (v * log((u + ((1.0e0 - u) * exp(((-2.0e0) / v))))))
end function
function code(u, v)
	return Float32(Float32(1.0) + Float32(v * log(Float32(u + Float32(Float32(Float32(1.0) - u) * exp(Float32(Float32(-2.0) / v)))))))
end
function tmp = code(u, v)
	tmp = single(1.0) + (v * log((u + ((single(1.0) - u) * exp((single(-2.0) / v))))));
end
\begin{array}{l}

\\
1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right)
\end{array}

Alternative 1: 99.4% accurate, 0.7× speedup?

\[\begin{array}{l} \\ \log \left({\left(e^{\frac{-1}{v}}\right)}^{2} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \end{array} \]
(FPCore (u v)
 :precision binary32
 (+ (* (log (+ (* (pow (exp (/ -1.0 v)) 2.0) (- 1.0 u)) u)) v) 1.0))
float code(float u, float v) {
	return (logf(((powf(expf((-1.0f / v)), 2.0f) * (1.0f - u)) + u)) * v) + 1.0f;
}
real(4) function code(u, v)
    real(4), intent (in) :: u
    real(4), intent (in) :: v
    code = (log((((exp(((-1.0e0) / v)) ** 2.0e0) * (1.0e0 - u)) + u)) * v) + 1.0e0
end function
function code(u, v)
	return Float32(Float32(log(Float32(Float32((exp(Float32(Float32(-1.0) / v)) ^ Float32(2.0)) * Float32(Float32(1.0) - u)) + u)) * v) + Float32(1.0))
end
function tmp = code(u, v)
	tmp = (log((((exp((single(-1.0) / v)) ^ single(2.0)) * (single(1.0) - u)) + u)) * v) + single(1.0);
end
\begin{array}{l}

\\
\log \left({\left(e^{\frac{-1}{v}}\right)}^{2} \cdot \left(1 - u\right) + u\right) \cdot v + 1
\end{array}
Derivation
  1. Initial program 99.5%

    \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-exp.f32N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
    2. lift-/.f32N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{\frac{-2}{v}}}\right) \]
    3. clear-numN/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{\frac{1}{\frac{v}{-2}}}}\right) \]
    4. frac-2negN/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{1}{\color{blue}{\frac{\mathsf{neg}\left(v\right)}{\mathsf{neg}\left(-2\right)}}}}\right) \]
    5. associate-/r/N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{\frac{1}{\mathsf{neg}\left(v\right)} \cdot \left(\mathsf{neg}\left(-2\right)\right)}}\right) \]
    6. exp-prodN/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{\frac{1}{\mathsf{neg}\left(v\right)}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}}\right) \]
    7. lower-pow.f32N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{\frac{1}{\mathsf{neg}\left(v\right)}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}}\right) \]
    8. lower-exp.f32N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\color{blue}{\left(e^{\frac{1}{\mathsf{neg}\left(v\right)}}\right)}}^{\left(\mathsf{neg}\left(-2\right)\right)}\right) \]
    9. neg-mul-1N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{\frac{1}{\color{blue}{-1 \cdot v}}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}\right) \]
    10. associate-/r*N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{\color{blue}{\frac{\frac{1}{-1}}{v}}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}\right) \]
    11. metadata-evalN/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{\frac{\color{blue}{-1}}{v}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}\right) \]
    12. lower-/.f32N/A

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{\color{blue}{\frac{-1}{v}}}\right)}^{\left(\mathsf{neg}\left(-2\right)\right)}\right) \]
    13. metadata-eval99.5

      \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{\frac{-1}{v}}\right)}^{\color{blue}{2}}\right) \]
  4. Applied rewrites99.5%

    \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{\frac{-1}{v}}\right)}^{2}}\right) \]
  5. Final simplification99.5%

    \[\leadsto \log \left({\left(e^{\frac{-1}{v}}\right)}^{2} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \]
  6. Add Preprocessing

Alternative 2: 87.2% accurate, 0.7× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v \leq -1:\\ \;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{0.16666666666666666}{v \cdot v}, \left(u \cdot u\right) \cdot \left(\frac{\frac{-2}{u} + \left(\frac{2}{v} + 2\right)}{u} - \frac{2}{v}\right)\right) + 1\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \end{array} \]
(FPCore (u v)
 :precision binary32
 (if (<= (* (log (+ (* (exp (/ -2.0 v)) (- 1.0 u)) u)) v) -1.0)
   (+
    (fma
     (* (fma -24.0 u 8.0) u)
     (/ 0.16666666666666666 (* v v))
     (* (* u u) (- (/ (+ (/ -2.0 u) (+ (/ 2.0 v) 2.0)) u) (/ 2.0 v))))
    1.0)
   1.0))
float code(float u, float v) {
	float tmp;
	if ((logf(((expf((-2.0f / v)) * (1.0f - u)) + u)) * v) <= -1.0f) {
		tmp = fmaf((fmaf(-24.0f, u, 8.0f) * u), (0.16666666666666666f / (v * v)), ((u * u) * ((((-2.0f / u) + ((2.0f / v) + 2.0f)) / u) - (2.0f / v)))) + 1.0f;
	} else {
		tmp = 1.0f;
	}
	return tmp;
}
function code(u, v)
	tmp = Float32(0.0)
	if (Float32(log(Float32(Float32(exp(Float32(Float32(-2.0) / v)) * Float32(Float32(1.0) - u)) + u)) * v) <= Float32(-1.0))
		tmp = Float32(fma(Float32(fma(Float32(-24.0), u, Float32(8.0)) * u), Float32(Float32(0.16666666666666666) / Float32(v * v)), Float32(Float32(u * u) * Float32(Float32(Float32(Float32(Float32(-2.0) / u) + Float32(Float32(Float32(2.0) / v) + Float32(2.0))) / u) - Float32(Float32(2.0) / v)))) + Float32(1.0));
	else
		tmp = Float32(1.0);
	end
	return tmp
end
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;\log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v \leq -1:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{0.16666666666666666}{v \cdot v}, \left(u \cdot u\right) \cdot \left(\frac{\frac{-2}{u} + \left(\frac{2}{v} + 2\right)}{u} - \frac{2}{v}\right)\right) + 1\\

\mathbf{else}:\\
\;\;\;\;1\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f32 v (log.f32 (+.f32 u (*.f32 (-.f32 #s(literal 1 binary32) u) (exp.f32 (/.f32 #s(literal -2 binary32) v)))))) < -1

    1. Initial program 92.6%

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

      \[\leadsto 1 + \color{blue}{\left(-2 \cdot \left(1 - u\right) + \left(\frac{1}{6} \cdot \frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}} + \frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v}\right)\right)} \]
    4. Step-by-step derivation
      1. +-commutativeN/A

        \[\leadsto 1 + \color{blue}{\left(\left(\frac{1}{6} \cdot \frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}} + \frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v}\right) + -2 \cdot \left(1 - u\right)\right)} \]
      2. associate-+l+N/A

        \[\leadsto 1 + \color{blue}{\left(\frac{1}{6} \cdot \frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}} + \left(\frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v} + -2 \cdot \left(1 - u\right)\right)\right)} \]
      3. *-commutativeN/A

        \[\leadsto 1 + \left(\color{blue}{\frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}} \cdot \frac{1}{6}} + \left(\frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v} + -2 \cdot \left(1 - u\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto 1 + \left(\frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}} \cdot \frac{1}{6} + \color{blue}{\left(-2 \cdot \left(1 - u\right) + \frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v}\right)}\right) \]
      5. lower-fma.f32N/A

        \[\leadsto 1 + \color{blue}{\mathsf{fma}\left(\frac{-16 \cdot {\left(1 - u\right)}^{3} + \left(-8 \cdot \left(1 - u\right) + 24 \cdot {\left(1 - u\right)}^{2}\right)}{{v}^{2}}, \frac{1}{6}, -2 \cdot \left(1 - u\right) + \frac{1}{2} \cdot \frac{-4 \cdot {\left(1 - u\right)}^{2} + 4 \cdot \left(1 - u\right)}{v}\right)} \]
    5. Applied rewrites5.3%

      \[\leadsto 1 + \color{blue}{\mathsf{fma}\left(\frac{\mathsf{fma}\left({\left(1 - u\right)}^{3}, -16, \left(1 - u\right) \cdot \mathsf{fma}\left(24, 1 - u, -8\right)\right)}{v \cdot v}, 0.16666666666666666, \mathsf{fma}\left(\frac{\left(1 - u\right) \cdot \mathsf{fma}\left(-4, 1 - u, 4\right)}{v}, 0.5, \left(1 - u\right) \cdot -2\right)\right)} \]
    6. Step-by-step derivation
      1. Applied rewrites5.6%

        \[\leadsto 1 + \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(24, 1 - u, -8\right), 1 - u, -16 \cdot {\left(1 - u\right)}^{3}\right), \color{blue}{\frac{0.16666666666666666}{v \cdot v}}, \mathsf{fma}\left(0.5 \cdot \left(1 - u\right), \frac{\mathsf{fma}\left(-4, 1 - u, 4\right)}{v}, -2 \cdot \left(1 - u\right)\right)\right) \]
      2. Taylor expanded in u around 0

        \[\leadsto 1 + \mathsf{fma}\left(u \cdot \left(8 + -24 \cdot u\right), \frac{\color{blue}{\frac{1}{6}}}{v \cdot v}, \mathsf{fma}\left(\frac{1}{2} \cdot \left(1 - u\right), \frac{\mathsf{fma}\left(-4, 1 - u, 4\right)}{v}, -2 \cdot \left(1 - u\right)\right)\right) \]
      3. Step-by-step derivation
        1. Applied rewrites52.9%

          \[\leadsto 1 + \mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{\color{blue}{0.16666666666666666}}{v \cdot v}, \mathsf{fma}\left(0.5 \cdot \left(1 - u\right), \frac{\mathsf{fma}\left(-4, 1 - u, 4\right)}{v}, -2 \cdot \left(1 - u\right)\right)\right) \]
        2. Taylor expanded in u around -inf

          \[\leadsto 1 + \mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{\frac{1}{6}}{v \cdot v}, {u}^{2} \cdot \left(-1 \cdot \frac{2 \cdot \frac{1}{u} - \left(2 + 2 \cdot \frac{1}{v}\right)}{u} - 2 \cdot \frac{1}{v}\right)\right) \]
        3. Applied rewrites59.0%

          \[\leadsto 1 + \mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{0.16666666666666666}{v \cdot v}, \left(\frac{\frac{-2}{u} + \left(\frac{2}{v} + 2\right)}{u} - \frac{2}{v}\right) \cdot \left(u \cdot u\right)\right) \]

        if -1 < (*.f32 v (log.f32 (+.f32 u (*.f32 (-.f32 #s(literal 1 binary32) u) (exp.f32 (/.f32 #s(literal -2 binary32) v))))))

        1. Initial program 100.0%

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

          \[\leadsto \color{blue}{1} \]
        4. Step-by-step derivation
          1. Applied rewrites90.9%

            \[\leadsto \color{blue}{1} \]
        5. Recombined 2 regimes into one program.
        6. Final simplification85.4%

          \[\leadsto \begin{array}{l} \mathbf{if}\;\log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v \leq -1:\\ \;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(-24, u, 8\right) \cdot u, \frac{0.16666666666666666}{v \cdot v}, \left(u \cdot u\right) \cdot \left(\frac{\frac{-2}{u} + \left(\frac{2}{v} + 2\right)}{u} - \frac{2}{v}\right)\right) + 1\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
        7. Add Preprocessing

        Alternative 3: 99.5% accurate, 1.0× speedup?

        \[\begin{array}{l} \\ \log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v)
         :precision binary32
         (+ (* (log (+ (* (exp (/ -2.0 v)) (- 1.0 u)) u)) v) 1.0))
        float code(float u, float v) {
        	return (logf(((expf((-2.0f / v)) * (1.0f - u)) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log(((exp(((-2.0e0) / v)) * (1.0e0 - u)) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(Float32(exp(Float32(Float32(-2.0) / v)) * Float32(Float32(1.0) - u)) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log(((exp((single(-2.0) / v)) * (single(1.0) - u)) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Final simplification99.5%

          \[\leadsto \log \left(e^{\frac{-2}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \]
        4. Add Preprocessing

        Alternative 4: 96.2% accurate, 1.0× speedup?

        \[\begin{array}{l} \\ \log \left(e^{\frac{-2}{v}} + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v) :precision binary32 (+ (* (log (+ (exp (/ -2.0 v)) u)) v) 1.0))
        float code(float u, float v) {
        	return (logf((expf((-2.0f / v)) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log((exp(((-2.0e0) / v)) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(exp(Float32(Float32(-2.0) / v)) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log((exp((single(-2.0) / v)) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(e^{\frac{-2}{v}} + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
          2. *-lft-identityN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
          3. exp-prodN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
          4. lift-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
          5. frac-2negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
          6. distribute-frac-neg2N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
          7. pow-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          8. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          9. lower-pow.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          10. exp-1-eN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          11. lower-E.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          12. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          13. metadata-eval99.5

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
        4. Applied rewrites99.5%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
        5. Taylor expanded in u around 0

          \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{\frac{1}{e^{2 \cdot \frac{\log \mathsf{E}\left(\right)}{v}}}}\right) \]
        6. Step-by-step derivation
          1. rec-expN/A

            \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{e^{\mathsf{neg}\left(2 \cdot \frac{\log \mathsf{E}\left(\right)}{v}\right)}}\right) \]
          2. log-EN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\mathsf{neg}\left(2 \cdot \frac{\color{blue}{1}}{v}\right)}\right) \]
          3. distribute-lft-neg-inN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\color{blue}{\left(\mathsf{neg}\left(2\right)\right) \cdot \frac{1}{v}}}\right) \]
          4. lower-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{e^{\left(\mathsf{neg}\left(2\right)\right) \cdot \frac{1}{v}}}\right) \]
          5. distribute-lft-neg-inN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\color{blue}{\mathsf{neg}\left(2 \cdot \frac{1}{v}\right)}}\right) \]
          6. associate-*r/N/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\mathsf{neg}\left(\color{blue}{\frac{2 \cdot 1}{v}}\right)}\right) \]
          7. metadata-evalN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\mathsf{neg}\left(\frac{\color{blue}{2}}{v}\right)}\right) \]
          8. distribute-neg-fracN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\color{blue}{\frac{\mathsf{neg}\left(2\right)}{v}}}\right) \]
          9. metadata-evalN/A

            \[\leadsto 1 + v \cdot \log \left(u + e^{\frac{\color{blue}{-2}}{v}}\right) \]
          10. lower-/.f3296.4

            \[\leadsto 1 + v \cdot \log \left(u + e^{\color{blue}{\frac{-2}{v}}}\right) \]
        7. Applied rewrites96.4%

          \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{e^{\frac{-2}{v}}}\right) \]
        8. Final simplification96.4%

          \[\leadsto \log \left(e^{\frac{-2}{v}} + u\right) \cdot v + 1 \]
        9. Add Preprocessing

        Alternative 5: 95.1% accurate, 1.3× speedup?

        \[\begin{array}{l} \\ \log \left(\frac{1}{1 - \frac{-2 - \frac{\frac{1.3333333333333333}{v} + 2}{v}}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v)
         :precision binary32
         (+
          (*
           (log
            (+
             (*
              (/ 1.0 (- 1.0 (/ (- -2.0 (/ (+ (/ 1.3333333333333333 v) 2.0) v)) v)))
              (- 1.0 u))
             u))
           v)
          1.0))
        float code(float u, float v) {
        	return (logf((((1.0f / (1.0f - ((-2.0f - (((1.3333333333333333f / v) + 2.0f) / v)) / v))) * (1.0f - u)) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log((((1.0e0 / (1.0e0 - (((-2.0e0) - (((1.3333333333333333e0 / v) + 2.0e0) / v)) / v))) * (1.0e0 - u)) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(Float32(Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(Float32(-2.0) - Float32(Float32(Float32(Float32(1.3333333333333333) / v) + Float32(2.0)) / v)) / v))) * Float32(Float32(1.0) - u)) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log((((single(1.0) / (single(1.0) - ((single(-2.0) - (((single(1.3333333333333333) / v) + single(2.0)) / v)) / v))) * (single(1.0) - u)) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(\frac{1}{1 - \frac{-2 - \frac{\frac{1.3333333333333333}{v} + 2}{v}}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
          2. *-lft-identityN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
          3. exp-prodN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
          4. lift-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
          5. frac-2negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
          6. distribute-frac-neg2N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
          7. pow-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          8. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          9. lower-pow.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          10. exp-1-eN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          11. lower-E.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          12. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          13. metadata-eval99.5

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
        4. Applied rewrites99.5%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
        5. Taylor expanded in v around -inf

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 + -1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -1 \cdot \frac{\frac{4}{3} \cdot \frac{{\log \mathsf{E}\left(\right)}^{3}}{v} + 2 \cdot {\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
        6. Step-by-step derivation
          1. mul-1-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{1 + \color{blue}{\left(\mathsf{neg}\left(\frac{-2 \cdot \log \mathsf{E}\left(\right) + -1 \cdot \frac{\frac{4}{3} \cdot \frac{{\log \mathsf{E}\left(\right)}^{3}}{v} + 2 \cdot {\log \mathsf{E}\left(\right)}^{2}}{v}}{v}\right)\right)}}\right) \]
          2. unsub-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 - \frac{-2 \cdot \log \mathsf{E}\left(\right) + -1 \cdot \frac{\frac{4}{3} \cdot \frac{{\log \mathsf{E}\left(\right)}^{3}}{v} + 2 \cdot {\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
          3. lower--.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 - \frac{-2 \cdot \log \mathsf{E}\left(\right) + -1 \cdot \frac{\frac{4}{3} \cdot \frac{{\log \mathsf{E}\left(\right)}^{3}}{v} + 2 \cdot {\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
          4. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{1 - \color{blue}{\frac{-2 \cdot \log \mathsf{E}\left(\right) + -1 \cdot \frac{\frac{4}{3} \cdot \frac{{\log \mathsf{E}\left(\right)}^{3}}{v} + 2 \cdot {\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
        7. Applied rewrites94.7%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 - \frac{-2 - \frac{\frac{1.3333333333333333}{v} + 2}{v}}{v}}}\right) \]
        8. Final simplification94.7%

          \[\leadsto \log \left(\frac{1}{1 - \frac{-2 - \frac{\frac{1.3333333333333333}{v} + 2}{v}}{v}} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \]
        9. Add Preprocessing

        Alternative 6: 93.6% accurate, 1.5× speedup?

        \[\begin{array}{l} \\ \log \left(\frac{1}{\frac{\frac{2}{v} + 2}{v} + 1} \cdot \left(-u\right) + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v)
         :precision binary32
         (+ (* (log (+ (* (/ 1.0 (+ (/ (+ (/ 2.0 v) 2.0) v) 1.0)) (- u)) u)) v) 1.0))
        float code(float u, float v) {
        	return (logf((((1.0f / ((((2.0f / v) + 2.0f) / v) + 1.0f)) * -u) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log((((1.0e0 / ((((2.0e0 / v) + 2.0e0) / v) + 1.0e0)) * -u) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(Float32(Float32(Float32(1.0) / Float32(Float32(Float32(Float32(Float32(2.0) / v) + Float32(2.0)) / v) + Float32(1.0))) * Float32(-u)) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log((((single(1.0) / ((((single(2.0) / v) + single(2.0)) / v) + single(1.0))) * -u) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(\frac{1}{\frac{\frac{2}{v} + 2}{v} + 1} \cdot \left(-u\right) + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
          2. *-lft-identityN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
          3. exp-prodN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
          4. lift-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
          5. frac-2negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
          6. distribute-frac-neg2N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
          7. pow-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          8. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          9. lower-pow.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          10. exp-1-eN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          11. lower-E.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          12. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          13. metadata-eval99.5

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
        4. Applied rewrites99.5%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
        5. Taylor expanded in v around -inf

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 + -1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
        6. Step-by-step derivation
          1. +-commutativeN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
          2. lower-+.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
        7. Applied rewrites93.0%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{\frac{2}{v} + 2}{v} + 1}}\right) \]
        8. Taylor expanded in u around inf

          \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{\left(-1 \cdot u\right)} \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) \]
        9. Step-by-step derivation
          1. mul-1-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{\left(\mathsf{neg}\left(u\right)\right)} \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) \]
          2. lower-neg.f3293.3

            \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{\left(-u\right)} \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) \]
        10. Applied rewrites93.3%

          \[\leadsto 1 + v \cdot \log \left(u + \color{blue}{\left(-u\right)} \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) \]
        11. Final simplification93.3%

          \[\leadsto \log \left(\frac{1}{\frac{\frac{2}{v} + 2}{v} + 1} \cdot \left(-u\right) + u\right) \cdot v + 1 \]
        12. Add Preprocessing

        Alternative 7: 93.6% accurate, 1.5× speedup?

        \[\begin{array}{l} \\ \log \left(\frac{1 - u}{\frac{\frac{2}{v} + 2}{v} + 1} + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v)
         :precision binary32
         (+ (* (log (+ (/ (- 1.0 u) (+ (/ (+ (/ 2.0 v) 2.0) v) 1.0)) u)) v) 1.0))
        float code(float u, float v) {
        	return (logf((((1.0f - u) / ((((2.0f / v) + 2.0f) / v) + 1.0f)) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log((((1.0e0 - u) / ((((2.0e0 / v) + 2.0e0) / v) + 1.0e0)) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(Float32(Float32(Float32(1.0) - u) / Float32(Float32(Float32(Float32(Float32(2.0) / v) + Float32(2.0)) / v) + Float32(1.0))) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log((((single(1.0) - u) / ((((single(2.0) / v) + single(2.0)) / v) + single(1.0))) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(\frac{1 - u}{\frac{\frac{2}{v} + 2}{v} + 1} + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
          2. *-lft-identityN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
          3. exp-prodN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
          4. lift-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
          5. frac-2negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
          6. distribute-frac-neg2N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
          7. pow-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          8. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          9. lower-pow.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          10. exp-1-eN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          11. lower-E.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          12. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          13. metadata-eval99.5

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
        4. Applied rewrites99.5%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
        5. Taylor expanded in v around -inf

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 + -1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
        6. Step-by-step derivation
          1. +-commutativeN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
          2. lower-+.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
        7. Applied rewrites93.0%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{\frac{2}{v} + 2}{v} + 1}}\right) \]
        8. Step-by-step derivation
          1. lift-+.f32N/A

            \[\leadsto \color{blue}{1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right)} \]
          2. +-commutativeN/A

            \[\leadsto \color{blue}{v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) + 1} \]
          3. lower-+.f3293.0

            \[\leadsto \color{blue}{v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{\frac{2}{v} + 2}{v} + 1}\right) + 1} \]
        9. Applied rewrites93.0%

          \[\leadsto \color{blue}{\log \left(\frac{1 - u}{\frac{\frac{2}{v} + 2}{v} + 1} + u\right) \cdot v + 1} \]
        10. Add Preprocessing

        Alternative 8: 91.5% accurate, 1.5× speedup?

        \[\begin{array}{l} \\ \log \left(\frac{1}{\frac{2}{v \cdot v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \end{array} \]
        (FPCore (u v)
         :precision binary32
         (+ (* (log (+ (* (/ 1.0 (+ (/ 2.0 (* v v)) 1.0)) (- 1.0 u)) u)) v) 1.0))
        float code(float u, float v) {
        	return (logf((((1.0f / ((2.0f / (v * v)) + 1.0f)) * (1.0f - u)) + u)) * v) + 1.0f;
        }
        
        real(4) function code(u, v)
            real(4), intent (in) :: u
            real(4), intent (in) :: v
            code = (log((((1.0e0 / ((2.0e0 / (v * v)) + 1.0e0)) * (1.0e0 - u)) + u)) * v) + 1.0e0
        end function
        
        function code(u, v)
        	return Float32(Float32(log(Float32(Float32(Float32(Float32(1.0) / Float32(Float32(Float32(2.0) / Float32(v * v)) + Float32(1.0))) * Float32(Float32(1.0) - u)) + u)) * v) + Float32(1.0))
        end
        
        function tmp = code(u, v)
        	tmp = (log((((single(1.0) / ((single(2.0) / (v * v)) + single(1.0))) * (single(1.0) - u)) + u)) * v) + single(1.0);
        end
        
        \begin{array}{l}
        
        \\
        \log \left(\frac{1}{\frac{2}{v \cdot v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1
        \end{array}
        
        Derivation
        1. Initial program 99.5%

          \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-exp.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
          2. *-lft-identityN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
          3. exp-prodN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
          4. lift-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
          5. frac-2negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
          6. distribute-frac-neg2N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
          7. pow-negN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          8. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          9. lower-pow.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          10. exp-1-eN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          11. lower-E.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
          12. lower-/.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
          13. metadata-eval99.5

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
        4. Applied rewrites99.5%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
        5. Taylor expanded in v around -inf

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 + -1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v}}}\right) \]
        6. Step-by-step derivation
          1. +-commutativeN/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
          2. lower-+.f32N/A

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{-1 \cdot \frac{-2 \cdot \log \mathsf{E}\left(\right) + -2 \cdot \frac{{\log \mathsf{E}\left(\right)}^{2}}{v}}{v} + 1}}\right) \]
        7. Applied rewrites93.0%

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{\frac{2}{v} + 2}{v} + 1}}\right) \]
        8. Taylor expanded in v around 0

          \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{2}{{v}^{2}} + 1}\right) \]
        9. Step-by-step derivation
          1. Applied rewrites91.1%

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{2}{v \cdot v} + 1}\right) \]
          2. Final simplification91.1%

            \[\leadsto \log \left(\frac{1}{\frac{2}{v \cdot v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \]
          3. Add Preprocessing

          Alternative 9: 91.2% accurate, 1.6× speedup?

          \[\begin{array}{l} \\ \log \left(\frac{1}{\frac{2}{v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \end{array} \]
          (FPCore (u v)
           :precision binary32
           (+ (* (log (+ (* (/ 1.0 (+ (/ 2.0 v) 1.0)) (- 1.0 u)) u)) v) 1.0))
          float code(float u, float v) {
          	return (logf((((1.0f / ((2.0f / v) + 1.0f)) * (1.0f - u)) + u)) * v) + 1.0f;
          }
          
          real(4) function code(u, v)
              real(4), intent (in) :: u
              real(4), intent (in) :: v
              code = (log((((1.0e0 / ((2.0e0 / v) + 1.0e0)) * (1.0e0 - u)) + u)) * v) + 1.0e0
          end function
          
          function code(u, v)
          	return Float32(Float32(log(Float32(Float32(Float32(Float32(1.0) / Float32(Float32(Float32(2.0) / v) + Float32(1.0))) * Float32(Float32(1.0) - u)) + u)) * v) + Float32(1.0))
          end
          
          function tmp = code(u, v)
          	tmp = (log((((single(1.0) / ((single(2.0) / v) + single(1.0))) * (single(1.0) - u)) + u)) * v) + single(1.0);
          end
          
          \begin{array}{l}
          
          \\
          \log \left(\frac{1}{\frac{2}{v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1
          \end{array}
          
          Derivation
          1. Initial program 99.5%

            \[1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\frac{-2}{v}}\right) \]
          2. Add Preprocessing
          3. Step-by-step derivation
            1. lift-exp.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{e^{\frac{-2}{v}}}\right) \]
            2. *-lft-identityN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot e^{\color{blue}{1 \cdot \frac{-2}{v}}}\right) \]
            3. exp-prodN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\frac{-2}{v}\right)}}\right) \]
            4. lift-/.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{-2}{v}\right)}}\right) \]
            5. frac-2negN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{\mathsf{neg}\left(v\right)}\right)}}\right) \]
            6. distribute-frac-neg2N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot {\left(e^{1}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)\right)}}\right) \]
            7. pow-negN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
            8. lower-/.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
            9. lower-pow.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{{\left(e^{1}\right)}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
            10. exp-1-eN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
            11. lower-E.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\color{blue}{\mathsf{E}\left(\right)}}^{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}\right) \]
            12. lower-/.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\color{blue}{\left(\frac{\mathsf{neg}\left(-2\right)}{v}\right)}}}\right) \]
            13. metadata-eval99.5

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{\color{blue}{2}}{v}\right)}}\right) \]
          4. Applied rewrites99.5%

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{{\mathsf{E}\left(\right)}^{\left(\frac{2}{v}\right)}}}\right) \]
          5. Taylor expanded in v around inf

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{1 + 2 \cdot \frac{\log \mathsf{E}\left(\right)}{v}}}\right) \]
          6. Step-by-step derivation
            1. +-commutativeN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{2 \cdot \frac{\log \mathsf{E}\left(\right)}{v} + 1}}\right) \]
            2. log-EN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{2 \cdot \frac{\color{blue}{1}}{v} + 1}\right) \]
            3. lower-+.f32N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{2 \cdot \frac{1}{v} + 1}}\right) \]
            4. associate-*r/N/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{2 \cdot 1}{v}} + 1}\right) \]
            5. metadata-evalN/A

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\frac{\color{blue}{2}}{v} + 1}\right) \]
            6. lower-/.f3289.9

              \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{2}{v}} + 1}\right) \]
          7. Applied rewrites89.9%

            \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{\color{blue}{\frac{2}{v} + 1}}\right) \]
          8. Final simplification89.9%

            \[\leadsto \log \left(\frac{1}{\frac{2}{v} + 1} \cdot \left(1 - u\right) + u\right) \cdot v + 1 \]
          9. Add Preprocessing

          Alternative 10: 87.1% accurate, 231.0× speedup?

          \[\begin{array}{l} \\ 1 \end{array} \]
          (FPCore (u v) :precision binary32 1.0)
          float code(float u, float v) {
          	return 1.0f;
          }
          
          real(4) function code(u, v)
              real(4), intent (in) :: u
              real(4), intent (in) :: v
              code = 1.0e0
          end function
          
          function code(u, v)
          	return Float32(1.0)
          end
          
          function tmp = code(u, v)
          	tmp = single(1.0);
          end
          
          \begin{array}{l}
          
          \\
          1
          \end{array}
          
          Derivation
          1. Initial program 99.5%

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

            \[\leadsto \color{blue}{1} \]
          4. Step-by-step derivation
            1. Applied rewrites85.5%

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

            Alternative 11: 5.9% accurate, 231.0× speedup?

            \[\begin{array}{l} \\ -1 \end{array} \]
            (FPCore (u v) :precision binary32 -1.0)
            float code(float u, float v) {
            	return -1.0f;
            }
            
            real(4) function code(u, v)
                real(4), intent (in) :: u
                real(4), intent (in) :: v
                code = -1.0e0
            end function
            
            function code(u, v)
            	return Float32(-1.0)
            end
            
            function tmp = code(u, v)
            	tmp = single(-1.0);
            end
            
            \begin{array}{l}
            
            \\
            -1
            \end{array}
            
            Derivation
            1. Initial program 99.5%

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

              \[\leadsto \color{blue}{-1} \]
            4. Step-by-step derivation
              1. Applied rewrites5.8%

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

              Reproduce

              ?
              herbie shell --seed 2024243 
              (FPCore (u v)
                :name "HairBSDF, sample_f, cosTheta"
                :precision binary32
                :pre (and (and (<= 1e-5 u) (<= u 1.0)) (and (<= 0.0 v) (<= v 109.746574)))
                (+ 1.0 (* v (log (+ u (* (- 1.0 u) (exp (/ -2.0 v))))))))