HairBSDF, sample_f, cosTheta

Percentage Accurate: 99.5% → 99.5%
Time: 12.6s
Alternatives: 8
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 8 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.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(v, \log \left(u + e^{\frac{-2}{v}} \cdot \left(1 - u\right)\right), 1\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (fma v (log (+ u (* (exp (/ -2.0 v)) (- 1.0 u)))) 1.0))
float code(float u, float v) {
	return fmaf(v, logf((u + (expf((-2.0f / v)) * (1.0f - u)))), 1.0f);
}
function code(u, v)
	return fma(v, log(Float32(u + Float32(exp(Float32(Float32(-2.0) / v)) * Float32(Float32(1.0) - u)))), Float32(1.0))
end
\begin{array}{l}

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

    \[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 + v \cdot \log \left(u + e^{\frac{-2}{v}} \cdot \left(1 - u\right)\right)} \]
  4. Step-by-step derivation
    1. +-commutativeN/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    6. metadata-evalN/A

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

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

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

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

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{\color{blue}{-2}}{v}}, 1 - u, u\right)\right), 1\right) \]
    15. lower-/.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\color{blue}{\frac{-2}{v}}}, 1 - u, u\right)\right), 1\right) \]
    16. lower--.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, \color{blue}{1 - u}, u\right)\right), 1\right) \]
  5. Applied rewrites99.7%

    \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right)} \]
  6. Step-by-step derivation
    1. lift-/.f32N/A

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(e^{\frac{-2}{v}} \cdot \color{blue}{\left(1 - u\right)} + u\right), 1\right) \]
    4. lift-fma.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    5. lift-exp.f32N/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\mathsf{neg}\left(\color{blue}{\frac{2}{v}}\right)}, 1 - u, u\right)\right), 1\right) \]
    10. rec-expN/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    11. lift-exp.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{\color{blue}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    12. lift-/.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    13. lower-fma.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\frac{1}{e^{\frac{2}{v}}} \cdot \left(1 - u\right) + u\right)}, 1\right) \]
    14. *-commutativeN/A

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\color{blue}{\left(1 - u\right) \cdot \frac{1}{e^{\frac{2}{v}}}} + u\right), 1\right) \]
    16. lower-+.f3299.7

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

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

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

Alternative 2: 99.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (fma v (log (fma (exp (/ -2.0 v)) (- 1.0 u) u)) 1.0))
float code(float u, float v) {
	return fmaf(v, logf(fmaf(expf((-2.0f / v)), (1.0f - u), u)), 1.0f);
}
function code(u, v)
	return fma(v, log(fma(exp(Float32(Float32(-2.0) / v)), Float32(Float32(1.0) - u), u)), Float32(1.0))
end
\begin{array}{l}

\\
\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right)
\end{array}
Derivation
  1. Initial program 99.7%

    \[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 + v \cdot \log \left(u + e^{\frac{-2}{v}} \cdot \left(1 - u\right)\right)} \]
  4. Step-by-step derivation
    1. +-commutativeN/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    6. metadata-evalN/A

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

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

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

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

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{\color{blue}{-2}}{v}}, 1 - u, u\right)\right), 1\right) \]
    15. lower-/.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\color{blue}{\frac{-2}{v}}}, 1 - u, u\right)\right), 1\right) \]
    16. lower--.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, \color{blue}{1 - u}, u\right)\right), 1\right) \]
  5. Applied rewrites99.7%

    \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right)} \]
  6. Add Preprocessing

Alternative 3: 95.9% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(v, \log \left(e^{\frac{-2}{v}} + u\right), 1\right) \end{array} \]
(FPCore (u v) :precision binary32 (fma v (log (+ (exp (/ -2.0 v)) u)) 1.0))
float code(float u, float v) {
	return fmaf(v, logf((expf((-2.0f / v)) + u)), 1.0f);
}
function code(u, v)
	return fma(v, log(Float32(exp(Float32(Float32(-2.0) / v)) + u)), Float32(1.0))
end
\begin{array}{l}

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

    \[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 + v \cdot \log \left(u + e^{\frac{-2}{v}} \cdot \left(1 - u\right)\right)} \]
  4. Step-by-step derivation
    1. +-commutativeN/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    6. metadata-evalN/A

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

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

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

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

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{\color{blue}{-2}}{v}}, 1 - u, u\right)\right), 1\right) \]
    15. lower-/.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\color{blue}{\frac{-2}{v}}}, 1 - u, u\right)\right), 1\right) \]
    16. lower--.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, \color{blue}{1 - u}, u\right)\right), 1\right) \]
  5. Applied rewrites99.7%

    \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right)} \]
  6. Step-by-step derivation
    1. lift-/.f32N/A

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(e^{\frac{-2}{v}} \cdot \color{blue}{\left(1 - u\right)} + u\right), 1\right) \]
    4. lift-fma.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    5. lift-exp.f32N/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\mathsf{neg}\left(\color{blue}{\frac{2}{v}}\right)}, 1 - u, u\right)\right), 1\right) \]
    10. rec-expN/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    11. lift-exp.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{\color{blue}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    12. lift-/.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    13. lower-fma.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\frac{1}{e^{\frac{2}{v}}} \cdot \left(1 - u\right) + u\right)}, 1\right) \]
    14. *-commutativeN/A

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\color{blue}{\left(1 - u\right) \cdot \frac{1}{e^{\frac{2}{v}}}} + u\right), 1\right) \]
    16. lower-+.f3299.7

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

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

    \[\leadsto \mathsf{fma}\left(v, \log \left(\color{blue}{e^{\frac{-2}{v}}} + u\right), 1\right) \]
  9. Step-by-step derivation
    1. metadata-evalN/A

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

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

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

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

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

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(e^{\color{blue}{\frac{-2}{v}}} + u\right), 1\right) \]
  10. Applied rewrites97.4%

    \[\leadsto \mathsf{fma}\left(v, \log \left(\color{blue}{e^{\frac{-2}{v}}} + u\right), 1\right) \]
  11. Add Preprocessing

Alternative 4: 95.1% accurate, 1.3× speedup?

\[\begin{array}{l} \\ 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \frac{1}{1 - \frac{-2 + \frac{-2 + \frac{-1.3333333333333333}{v}}{v}}{v}}\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (+
  1.0
  (*
   v
   (log
    (+
     u
     (*
      (- 1.0 u)
      (/
       1.0
       (- 1.0 (/ (+ -2.0 (/ (+ -2.0 (/ -1.3333333333333333 v)) v)) v)))))))))
float code(float u, float v) {
	return 1.0f + (v * logf((u + ((1.0f - u) * (1.0f / (1.0f - ((-2.0f + ((-2.0f + (-1.3333333333333333f / v)) / v)) / 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) * (1.0e0 / (1.0e0 - (((-2.0e0) + (((-2.0e0) + ((-1.3333333333333333e0) / v)) / v)) / v)))))))
end function
function code(u, v)
	return Float32(Float32(1.0) + Float32(v * log(Float32(u + Float32(Float32(Float32(1.0) - u) * Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(Float32(-2.0) + Float32(Float32(Float32(-2.0) + Float32(Float32(-1.3333333333333333) / v)) / v)) / v))))))))
end
function tmp = code(u, v)
	tmp = single(1.0) + (v * log((u + ((single(1.0) - u) * (single(1.0) / (single(1.0) - ((single(-2.0) + ((single(-2.0) + (single(-1.3333333333333333) / v)) / v)) / v)))))));
end
\begin{array}{l}

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

    \[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. frac-2negN/A

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

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

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

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

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

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

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

    \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{e^{\frac{2}{v}}}}\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{-1 \cdot \frac{2 + \frac{4}{3} \cdot \frac{1}{v}}{v} - 2}{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{-1 \cdot \frac{2 + \frac{4}{3} \cdot \frac{1}{v}}{v} - 2}{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{-1 \cdot \frac{2 + \frac{4}{3} \cdot \frac{1}{v}}{v} - 2}{v}}}\right) \]
    3. lower--.f32N/A

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

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

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

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

Alternative 5: 95.1% accurate, 1.4× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{1 + \frac{2 + \frac{2 + \frac{1.3333333333333333}{v}}{v}}{v}}, 1 - u, u\right)\right), 1\right) \end{array} \]
(FPCore (u v)
 :precision binary32
 (fma
  v
  (log
   (fma
    (/ 1.0 (+ 1.0 (/ (+ 2.0 (/ (+ 2.0 (/ 1.3333333333333333 v)) v)) v)))
    (- 1.0 u)
    u))
  1.0))
float code(float u, float v) {
	return fmaf(v, logf(fmaf((1.0f / (1.0f + ((2.0f + ((2.0f + (1.3333333333333333f / v)) / v)) / v))), (1.0f - u), u)), 1.0f);
}
function code(u, v)
	return fma(v, log(fma(Float32(Float32(1.0) / Float32(Float32(1.0) + Float32(Float32(Float32(2.0) + Float32(Float32(Float32(2.0) + Float32(Float32(1.3333333333333333) / v)) / v)) / v))), Float32(Float32(1.0) - u), u)), Float32(1.0))
end
\begin{array}{l}

\\
\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{1 + \frac{2 + \frac{2 + \frac{1.3333333333333333}{v}}{v}}{v}}, 1 - u, u\right)\right), 1\right)
\end{array}
Derivation
  1. Initial program 99.7%

    \[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 + v \cdot \log \left(u + e^{\frac{-2}{v}} \cdot \left(1 - u\right)\right)} \]
  4. Step-by-step derivation
    1. +-commutativeN/A

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \color{blue}{\left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right)}, 1\right) \]
    6. metadata-evalN/A

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

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

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

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

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

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

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

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{\color{blue}{-2}}{v}}, 1 - u, u\right)\right), 1\right) \]
    15. lower-/.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\color{blue}{\frac{-2}{v}}}, 1 - u, u\right)\right), 1\right) \]
    16. lower--.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, \color{blue}{1 - u}, u\right)\right), 1\right) \]
  5. Applied rewrites99.7%

    \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\frac{-2}{v}}, 1 - u, u\right)\right), 1\right)} \]
  6. Step-by-step derivation
    1. metadata-evalN/A

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

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\color{blue}{\mathsf{neg}\left(\frac{2}{v}\right)}}, 1 - u, u\right)\right), 1\right) \]
    3. lift-/.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(e^{\mathsf{neg}\left(\color{blue}{\frac{2}{v}}\right)}, 1 - u, u\right)\right), 1\right) \]
    4. rec-expN/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    5. lift-exp.f32N/A

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{\color{blue}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
    6. lift-/.f3299.7

      \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
  7. Applied rewrites99.7%

    \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\color{blue}{\frac{1}{e^{\frac{2}{v}}}}, 1 - u, u\right)\right), 1\right) \]
  8. Taylor expanded in v around -inf

    \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{\color{blue}{1 + -1 \cdot \frac{-1 \cdot \frac{2 + \frac{4}{3} \cdot \frac{1}{v}}{v} - 2}{v}}}, 1 - u, u\right)\right), 1\right) \]
  9. Step-by-step derivation
    1. lower-+.f32N/A

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

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

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

    \[\leadsto \mathsf{fma}\left(v, \log \left(\mathsf{fma}\left(\frac{1}{\color{blue}{1 + \frac{\frac{2 + \frac{1.3333333333333333}{v}}{v} + 2}{v}}}, 1 - u, u\right)\right), 1\right) \]
  11. Final simplification96.3%

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

Alternative 6: 94.3% accurate, 2.2× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(v, \log u, 1\right) \end{array} \]
(FPCore (u v) :precision binary32 (fma v (log u) 1.0))
float code(float u, float v) {
	return fmaf(v, logf(u), 1.0f);
}
function code(u, v)
	return fma(v, log(u), Float32(1.0))
end
\begin{array}{l}

\\
\mathsf{fma}\left(v, \log u, 1\right)
\end{array}
Derivation
  1. Initial program 99.7%

    \[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. frac-2negN/A

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

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

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

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

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

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

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

    \[\leadsto 1 + v \cdot \log \left(u + \left(1 - u\right) \cdot \color{blue}{\frac{1}{e^{\frac{2}{v}}}}\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 + \left(2 \cdot \frac{1}{v} + \frac{2}{{v}^{2}}\right)}}\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}{\left(2 \cdot \frac{1}{v} + \frac{2}{{v}^{2}}\right) + 1}}\right) \]
    2. +-commutativeN/A

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

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

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \color{blue}{1 + v \cdot \log u} \]
  9. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto \color{blue}{v \cdot \log u + 1} \]
    2. lower-fma.f32N/A

      \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log u, 1\right)} \]
    3. lower-log.f3296.0

      \[\leadsto \mathsf{fma}\left(v, \color{blue}{\log u}, 1\right) \]
  10. Applied rewrites96.0%

    \[\leadsto \color{blue}{\mathsf{fma}\left(v, \log u, 1\right)} \]
  11. Add Preprocessing

Alternative 7: 86.4% 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.7%

    \[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 rewrites89.2%

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

    Alternative 8: 6.0% 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.7%

      \[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.1%

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

      Reproduce

      ?
      herbie shell --seed 2024214 
      (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))))))))