Disney BSSRDF, sample scattering profile, lower

Percentage Accurate: 61.9% → 98.9%
Time: 3.6s
Alternatives: 12
Speedup: 2.7×

Specification

?
\[\left(0 \leq s \land s \leq 256\right) \land \left(2.328306437 \cdot 10^{-10} \leq u \land u \leq 0.25\right)\]
\[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
(FPCore (s u) :precision binary32 (* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))
float code(float s, float u) {
	return s * logf((1.0f / (1.0f - (4.0f * u))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(4) function code(s, u)
use fmin_fmax_functions
    real(4), intent (in) :: s
    real(4), intent (in) :: u
    code = s * log((1.0e0 / (1.0e0 - (4.0e0 * u))))
end function
function code(s, u)
	return Float32(s * log(Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(4.0) * u)))))
end
function tmp = code(s, u)
	tmp = s * log((single(1.0) / (single(1.0) - (single(4.0) * u))));
end
s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right)

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 12 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: 61.9% accurate, 1.0× speedup?

\[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
(FPCore (s u) :precision binary32 (* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))
float code(float s, float u) {
	return s * logf((1.0f / (1.0f - (4.0f * u))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(4) function code(s, u)
use fmin_fmax_functions
    real(4), intent (in) :: s
    real(4), intent (in) :: u
    code = s * log((1.0e0 / (1.0e0 - (4.0e0 * u))))
end function
function code(s, u)
	return Float32(s * log(Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(4.0) * u)))))
end
function tmp = code(s, u)
	tmp = s * log((single(1.0) / (single(1.0) - (single(4.0) * u))));
end
s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right)

Alternative 1: 98.9% accurate, 0.6× speedup?

\[\begin{array}{l} \mathbf{if}\;u \leq 0.008700000122189522:\\ \;\;\;\;u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \end{array} \]
(FPCore (s u)
 :precision binary32
 (if (<= u 0.008700000122189522)
   (*
    u
    (fma
     4.0
     s
     (* u (fma 8.0 s (* u (fma 21.333333333333332 s (* 64.0 (* s u))))))))
   (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
	float tmp;
	if (u <= 0.008700000122189522f) {
		tmp = u * fmaf(4.0f, s, (u * fmaf(8.0f, s, (u * fmaf(21.333333333333332f, s, (64.0f * (s * u)))))));
	} else {
		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
	}
	return tmp;
}
function code(s, u)
	tmp = Float32(0.0)
	if (u <= Float32(0.008700000122189522))
		tmp = Float32(u * fma(Float32(4.0), s, Float32(u * fma(Float32(8.0), s, Float32(u * fma(Float32(21.333333333333332), s, Float32(Float32(64.0) * Float32(s * u))))))));
	else
		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
	end
	return tmp
end
\begin{array}{l}
\mathbf{if}\;u \leq 0.008700000122189522:\\
\;\;\;\;u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if u < 0.00870000012

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
    3. Step-by-step derivation
      1. lower-*.f32N/A

        \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
      2. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      4. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      6. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      7. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      8. lower-*.f3293.2%

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
    4. Applied rewrites93.2%

      \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]

    if 0.00870000012 < u

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Step-by-step derivation
      1. lift-*.f32N/A

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
      3. lower-*.f3261.9%

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      5. lift-/.f32N/A

        \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      6. log-recN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
      7. lower-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      8. lower-unsound-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      9. lower-neg.f32N/A

        \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
      10. lower-unsound-log.f3264.3%

        \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
      11. lift--.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
      12. lift-*.f32N/A

        \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
      13. fp-cancel-sub-sign-invN/A

        \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
      14. +-commutativeN/A

        \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
      15. lower-fma.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
      16. metadata-eval64.3%

        \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
    3. Applied rewrites64.3%

      \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 2: 98.9% accurate, 0.7× speedup?

\[\begin{array}{l} \mathbf{if}\;u \leq 0.008700000122189522:\\ \;\;\;\;s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \end{array} \]
(FPCore (s u)
 :precision binary32
 (if (<= u 0.008700000122189522)
   (* s (fma (fma (fma 64.0 u 21.333333333333332) u 8.0) (* u u) (* u 4.0)))
   (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
	float tmp;
	if (u <= 0.008700000122189522f) {
		tmp = s * fmaf(fmaf(fmaf(64.0f, u, 21.333333333333332f), u, 8.0f), (u * u), (u * 4.0f));
	} else {
		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
	}
	return tmp;
}
function code(s, u)
	tmp = Float32(0.0)
	if (u <= Float32(0.008700000122189522))
		tmp = Float32(s * fma(fma(fma(Float32(64.0), u, Float32(21.333333333333332)), u, Float32(8.0)), Float32(u * u), Float32(u * Float32(4.0))));
	else
		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
	end
	return tmp
end
\begin{array}{l}
\mathbf{if}\;u \leq 0.008700000122189522:\\
\;\;\;\;s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right)\\

\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if u < 0.00870000012

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
    3. Step-by-step derivation
      1. lower-*.f32N/A

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

        \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      4. lower-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      6. lower-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
      7. lower-*.f3292.9%

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
    4. Applied rewrites92.9%

      \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right)} \]
    5. Step-by-step derivation
      1. lift-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
      2. lift-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. +-commutativeN/A

        \[\leadsto s \cdot \left(u \cdot \left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) + \color{blue}{4}\right)\right) \]
      4. distribute-rgt-inN/A

        \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + \color{blue}{4 \cdot u}\right) \]
      5. lift-*.f32N/A

        \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + 4 \cdot u\right) \]
      6. *-commutativeN/A

        \[\leadsto s \cdot \left(\left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot u\right) \cdot u + 4 \cdot u\right) \]
      7. associate-*l*N/A

        \[\leadsto s \cdot \left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot \left(u \cdot u\right) + \color{blue}{4} \cdot u\right) \]
      8. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u \cdot u}, 4 \cdot u\right) \]
      9. lift-+.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      10. +-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      11. lift-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, u \cdot u, 4 \cdot u\right) \]
      12. *-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\left(\frac{64}{3} + 64 \cdot u\right) \cdot u + 8, u \cdot u, 4 \cdot u\right) \]
      13. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      14. lift-+.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      15. +-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      16. lift-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      17. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, 4 \cdot u\right) \]
      18. lower-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot \color{blue}{u}, 4 \cdot u\right) \]
      19. *-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
      20. lower-*.f3293.2%

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
    6. Applied rewrites93.2%

      \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), \color{blue}{u \cdot u}, u \cdot 4\right) \]

    if 0.00870000012 < u

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Step-by-step derivation
      1. lift-*.f32N/A

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
      3. lower-*.f3261.9%

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      5. lift-/.f32N/A

        \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      6. log-recN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
      7. lower-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      8. lower-unsound-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      9. lower-neg.f32N/A

        \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
      10. lower-unsound-log.f3264.3%

        \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
      11. lift--.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
      12. lift-*.f32N/A

        \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
      13. fp-cancel-sub-sign-invN/A

        \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
      14. +-commutativeN/A

        \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
      15. lower-fma.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
      16. metadata-eval64.3%

        \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
    3. Applied rewrites64.3%

      \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 3: 98.6% accurate, 0.6× speedup?

\[\begin{array}{l} \mathbf{if}\;1 - 4 \cdot u \leq 0.9652000069618225:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u, 4\right) \cdot s\right) \cdot u\\ \end{array} \]
(FPCore (s u)
 :precision binary32
 (if (<= (- 1.0 (* 4.0 u)) 0.9652000069618225)
   (* (- (log (fma -4.0 u 1.0))) s)
   (* (* (fma (fma (fma 64.0 u 21.333333333333332) u 8.0) u 4.0) s) u)))
float code(float s, float u) {
	float tmp;
	if ((1.0f - (4.0f * u)) <= 0.9652000069618225f) {
		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
	} else {
		tmp = (fmaf(fmaf(fmaf(64.0f, u, 21.333333333333332f), u, 8.0f), u, 4.0f) * s) * u;
	}
	return tmp;
}
function code(s, u)
	tmp = Float32(0.0)
	if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.9652000069618225))
		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
	else
		tmp = Float32(Float32(fma(fma(fma(Float32(64.0), u, Float32(21.333333333333332)), u, Float32(8.0)), u, Float32(4.0)) * s) * u);
	end
	return tmp
end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.9652000069618225:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\

\mathbf{else}:\\
\;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u, 4\right) \cdot s\right) \cdot u\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.965200007

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Step-by-step derivation
      1. lift-*.f32N/A

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
      3. lower-*.f3261.9%

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      5. lift-/.f32N/A

        \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      6. log-recN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
      7. lower-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      8. lower-unsound-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      9. lower-neg.f32N/A

        \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
      10. lower-unsound-log.f3264.3%

        \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
      11. lift--.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
      12. lift-*.f32N/A

        \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
      13. fp-cancel-sub-sign-invN/A

        \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
      14. +-commutativeN/A

        \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
      15. lower-fma.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
      16. metadata-eval64.3%

        \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
    3. Applied rewrites64.3%

      \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]

    if 0.965200007 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u))

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
    3. Step-by-step derivation
      1. lower-*.f32N/A

        \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
      2. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      4. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      6. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      7. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      8. lower-*.f3293.2%

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
    4. Applied rewrites93.2%

      \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
    5. Taylor expanded in s around 0

      \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
    6. Step-by-step derivation
      1. lower-*.f32N/A

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

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      4. lower-+.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
      6. lower-+.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
      7. lower-*.f3292.9%

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right) \]
    7. Applied rewrites92.9%

      \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)}\right) \]
    8. Step-by-step derivation
      1. lift-*.f32N/A

        \[\leadsto u \cdot \color{blue}{\left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
      2. *-commutativeN/A

        \[\leadsto \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right) \cdot \color{blue}{u} \]
      3. lower-*.f3292.9%

        \[\leadsto \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right) \cdot \color{blue}{u} \]
    9. Applied rewrites92.9%

      \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u, 4\right) \cdot s\right) \cdot \color{blue}{u} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 4: 98.4% accurate, 0.6× speedup?

\[\begin{array}{l} \mathbf{if}\;1 - 4 \cdot u \leq 0.9860000014305115:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \mathbf{else}:\\ \;\;\;\;u \cdot \mathsf{fma}\left(21.333333333333332 \cdot u - -8, u \cdot s, 4 \cdot s\right)\\ \end{array} \]
(FPCore (s u)
 :precision binary32
 (if (<= (- 1.0 (* 4.0 u)) 0.9860000014305115)
   (* (- (log (fma -4.0 u 1.0))) s)
   (* u (fma (- (* 21.333333333333332 u) -8.0) (* u s) (* 4.0 s)))))
float code(float s, float u) {
	float tmp;
	if ((1.0f - (4.0f * u)) <= 0.9860000014305115f) {
		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
	} else {
		tmp = u * fmaf(((21.333333333333332f * u) - -8.0f), (u * s), (4.0f * s));
	}
	return tmp;
}
function code(s, u)
	tmp = Float32(0.0)
	if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.9860000014305115))
		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
	else
		tmp = Float32(u * fma(Float32(Float32(Float32(21.333333333333332) * u) - Float32(-8.0)), Float32(u * s), Float32(Float32(4.0) * s)));
	end
	return tmp
end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.9860000014305115:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\

\mathbf{else}:\\
\;\;\;\;u \cdot \mathsf{fma}\left(21.333333333333332 \cdot u - -8, u \cdot s, 4 \cdot s\right)\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.986000001

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Step-by-step derivation
      1. lift-*.f32N/A

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
      3. lower-*.f3261.9%

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

        \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      5. lift-/.f32N/A

        \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
      6. log-recN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
      7. lower-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      8. lower-unsound-log.f32N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
      9. lower-neg.f32N/A

        \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
      10. lower-unsound-log.f3264.3%

        \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
      11. lift--.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
      12. lift-*.f32N/A

        \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
      13. fp-cancel-sub-sign-invN/A

        \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
      14. +-commutativeN/A

        \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
      15. lower-fma.f32N/A

        \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
      16. metadata-eval64.3%

        \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
    3. Applied rewrites64.3%

      \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]

    if 0.986000001 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u))

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
    3. Step-by-step derivation
      1. lower-*.f32N/A

        \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
      2. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      4. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      6. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      7. lower-*.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      8. lower-*.f3293.2%

        \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
    4. Applied rewrites93.2%

      \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
    5. Taylor expanded in s around 0

      \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
    6. Step-by-step derivation
      1. lower-*.f32N/A

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

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      4. lower-+.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
      6. lower-+.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
      7. lower-*.f3292.9%

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right) \]
    7. Applied rewrites92.9%

      \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)}\right) \]
    8. Taylor expanded in u around 0

      \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + \frac{64}{3} \cdot u\right)\right)\right) \]
    9. Step-by-step derivation
      1. lower-*.f3290.8%

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + 21.333333333333332 \cdot u\right)\right)\right) \]
    10. Applied rewrites90.8%

      \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + 21.333333333333332 \cdot u\right)\right)\right) \]
    11. Step-by-step derivation
      1. lift-*.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + \color{blue}{u \cdot \left(8 + \frac{64}{3} \cdot u\right)}\right)\right) \]
      2. lift-+.f32N/A

        \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \color{blue}{\left(8 + \frac{64}{3} \cdot u\right)}\right)\right) \]
      3. +-commutativeN/A

        \[\leadsto u \cdot \left(s \cdot \left(u \cdot \left(8 + \frac{64}{3} \cdot u\right) + 4\right)\right) \]
      4. distribute-rgt-inN/A

        \[\leadsto u \cdot \left(\left(u \cdot \left(8 + \frac{64}{3} \cdot u\right)\right) \cdot s + 4 \cdot \color{blue}{s}\right) \]
      5. lift-*.f32N/A

        \[\leadsto u \cdot \left(\left(u \cdot \left(8 + \frac{64}{3} \cdot u\right)\right) \cdot s + 4 \cdot s\right) \]
      6. *-commutativeN/A

        \[\leadsto u \cdot \left(\left(\left(8 + \frac{64}{3} \cdot u\right) \cdot u\right) \cdot s + 4 \cdot s\right) \]
      7. associate-*l*N/A

        \[\leadsto u \cdot \left(\left(8 + \frac{64}{3} \cdot u\right) \cdot \left(u \cdot s\right) + 4 \cdot s\right) \]
      8. *-commutativeN/A

        \[\leadsto u \cdot \left(\left(8 + \frac{64}{3} \cdot u\right) \cdot \left(s \cdot u\right) + 4 \cdot s\right) \]
      9. lower-fma.f32N/A

        \[\leadsto u \cdot \mathsf{fma}\left(8 + \frac{64}{3} \cdot u, s \cdot \color{blue}{u}, 4 \cdot s\right) \]
    12. Applied rewrites91.0%

      \[\leadsto u \cdot \mathsf{fma}\left(21.333333333333332 \cdot u - -8, u \cdot \color{blue}{s}, 4 \cdot s\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 5: 98.4% accurate, 0.8× speedup?

\[\begin{array}{l} \mathbf{if}\;u \leq 0.0035000001080334187:\\ \;\;\;\;s \cdot \mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u \cdot u, u \cdot 4\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \end{array} \]
(FPCore (s u)
 :precision binary32
 (if (<= u 0.0035000001080334187)
   (* s (fma (fma 21.333333333333332 u 8.0) (* u u) (* u 4.0)))
   (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
	float tmp;
	if (u <= 0.0035000001080334187f) {
		tmp = s * fmaf(fmaf(21.333333333333332f, u, 8.0f), (u * u), (u * 4.0f));
	} else {
		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
	}
	return tmp;
}
function code(s, u)
	tmp = Float32(0.0)
	if (u <= Float32(0.0035000001080334187))
		tmp = Float32(s * fma(fma(Float32(21.333333333333332), u, Float32(8.0)), Float32(u * u), Float32(u * Float32(4.0))));
	else
		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
	end
	return tmp
end
\begin{array}{l}
\mathbf{if}\;u \leq 0.0035000001080334187:\\
\;\;\;\;s \cdot \mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u \cdot u, u \cdot 4\right)\\

\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if u < 0.00350000011

    1. Initial program 61.9%

      \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
    3. Step-by-step derivation
      1. lower-*.f32N/A

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

        \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. lower-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      4. lower-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      5. lower-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
      6. lower-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
      7. lower-*.f3292.9%

        \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
    4. Applied rewrites92.9%

      \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right)} \]
    5. Step-by-step derivation
      1. lift-*.f32N/A

        \[\leadsto s \cdot \left(u \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
      2. lift-+.f32N/A

        \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
      3. +-commutativeN/A

        \[\leadsto s \cdot \left(u \cdot \left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) + \color{blue}{4}\right)\right) \]
      4. distribute-rgt-inN/A

        \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + \color{blue}{4 \cdot u}\right) \]
      5. lift-*.f32N/A

        \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + 4 \cdot u\right) \]
      6. *-commutativeN/A

        \[\leadsto s \cdot \left(\left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot u\right) \cdot u + 4 \cdot u\right) \]
      7. associate-*l*N/A

        \[\leadsto s \cdot \left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot \left(u \cdot u\right) + \color{blue}{4} \cdot u\right) \]
      8. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u \cdot u}, 4 \cdot u\right) \]
      9. lift-+.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      10. +-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      11. lift-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, u \cdot u, 4 \cdot u\right) \]
      12. *-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\left(\frac{64}{3} + 64 \cdot u\right) \cdot u + 8, u \cdot u, 4 \cdot u\right) \]
      13. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
      14. lift-+.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      15. +-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      16. lift-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
      17. lower-fma.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, 4 \cdot u\right) \]
      18. lower-*.f32N/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot \color{blue}{u}, 4 \cdot u\right) \]
      19. *-commutativeN/A

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
      20. lower-*.f3293.2%

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
    6. Applied rewrites93.2%

      \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), \color{blue}{u \cdot u}, u \cdot 4\right) \]
    7. Taylor expanded in u around 0

      \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3}, u, 8\right), u \cdot u, u \cdot 4\right) \]
    8. Step-by-step derivation
      1. Applied rewrites91.0%

        \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u \cdot u, u \cdot 4\right) \]

      if 0.00350000011 < u

      1. Initial program 61.9%

        \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
      2. Step-by-step derivation
        1. lift-*.f32N/A

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

          \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
        3. lower-*.f3261.9%

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

          \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
        5. lift-/.f32N/A

          \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
        6. log-recN/A

          \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
        7. lower-log.f32N/A

          \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
        8. lower-unsound-log.f32N/A

          \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
        9. lower-neg.f32N/A

          \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
        10. lower-unsound-log.f3264.3%

          \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
        11. lift--.f32N/A

          \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
        12. lift-*.f32N/A

          \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
        13. fp-cancel-sub-sign-invN/A

          \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
        14. +-commutativeN/A

          \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
        15. lower-fma.f32N/A

          \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
        16. metadata-eval64.3%

          \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
      3. Applied rewrites64.3%

        \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]
    9. Recombined 2 regimes into one program.
    10. Add Preprocessing

    Alternative 6: 98.1% accurate, 0.9× speedup?

    \[\begin{array}{l} \mathbf{if}\;u \leq 0.0035000001080334187:\\ \;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u, 4\right) \cdot s\right) \cdot u\\ \mathbf{else}:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \end{array} \]
    (FPCore (s u)
     :precision binary32
     (if (<= u 0.0035000001080334187)
       (* (* (fma (fma 21.333333333333332 u 8.0) u 4.0) s) u)
       (* (- (log (fma -4.0 u 1.0))) s)))
    float code(float s, float u) {
    	float tmp;
    	if (u <= 0.0035000001080334187f) {
    		tmp = (fmaf(fmaf(21.333333333333332f, u, 8.0f), u, 4.0f) * s) * u;
    	} else {
    		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
    	}
    	return tmp;
    }
    
    function code(s, u)
    	tmp = Float32(0.0)
    	if (u <= Float32(0.0035000001080334187))
    		tmp = Float32(Float32(fma(fma(Float32(21.333333333333332), u, Float32(8.0)), u, Float32(4.0)) * s) * u);
    	else
    		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
    	end
    	return tmp
    end
    
    \begin{array}{l}
    \mathbf{if}\;u \leq 0.0035000001080334187:\\
    \;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u, 4\right) \cdot s\right) \cdot u\\
    
    \mathbf{else}:\\
    \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
    
    
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if u < 0.00350000011

      1. Initial program 61.9%

        \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
      2. Taylor expanded in u around 0

        \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
      3. Step-by-step derivation
        1. lower-*.f32N/A

          \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
        2. lower-fma.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        3. lower-*.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \left(8 \cdot s + u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        4. lower-fma.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        5. lower-*.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \left(\frac{64}{3} \cdot s + 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        6. lower-fma.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        7. lower-*.f32N/A

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(\frac{64}{3}, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
        8. lower-*.f3293.2%

          \[\leadsto u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right) \]
      4. Applied rewrites93.2%

        \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, u \cdot \mathsf{fma}\left(8, s, u \cdot \mathsf{fma}\left(21.333333333333332, s, 64 \cdot \left(s \cdot u\right)\right)\right)\right)} \]
      5. Taylor expanded in s around 0

        \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
      6. Step-by-step derivation
        1. lower-*.f32N/A

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

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
        3. lower-*.f32N/A

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
        4. lower-+.f32N/A

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
        5. lower-*.f32N/A

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
        6. lower-+.f32N/A

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
        7. lower-*.f3292.9%

          \[\leadsto u \cdot \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right) \]
      7. Applied rewrites92.9%

        \[\leadsto u \cdot \left(s \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)}\right) \]
      8. Step-by-step derivation
        1. lift-*.f32N/A

          \[\leadsto u \cdot \color{blue}{\left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
        2. *-commutativeN/A

          \[\leadsto \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right) \cdot \color{blue}{u} \]
        3. lower-*.f3292.9%

          \[\leadsto \left(s \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right) \cdot \color{blue}{u} \]
      9. Applied rewrites92.9%

        \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u, 4\right) \cdot s\right) \cdot \color{blue}{u} \]
      10. Taylor expanded in u around 0

        \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3}, u, 8\right), u, 4\right) \cdot s\right) \cdot u \]
      11. Step-by-step derivation
        1. Applied rewrites90.8%

          \[\leadsto \left(\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u, 4\right) \cdot s\right) \cdot u \]

        if 0.00350000011 < u

        1. Initial program 61.9%

          \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
        2. Step-by-step derivation
          1. lift-*.f32N/A

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

            \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
          3. lower-*.f3261.9%

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

            \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
          5. lift-/.f32N/A

            \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
          6. log-recN/A

            \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
          7. lower-log.f32N/A

            \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
          8. lower-unsound-log.f32N/A

            \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
          9. lower-neg.f32N/A

            \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
          10. lower-unsound-log.f3264.3%

            \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
          11. lift--.f32N/A

            \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
          12. lift-*.f32N/A

            \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
          13. fp-cancel-sub-sign-invN/A

            \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
          14. +-commutativeN/A

            \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
          15. lower-fma.f32N/A

            \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
          16. metadata-eval64.3%

            \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
        3. Applied rewrites64.3%

          \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]
      12. Recombined 2 regimes into one program.
      13. Add Preprocessing

      Alternative 7: 96.8% accurate, 1.0× speedup?

      \[\begin{array}{l} \mathbf{if}\;u \leq 0.0010000000474974513:\\ \;\;\;\;s \cdot \mathsf{fma}\left(8, u \cdot u, u \cdot 4\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\ \end{array} \]
      (FPCore (s u)
       :precision binary32
       (if (<= u 0.0010000000474974513)
         (* s (fma 8.0 (* u u) (* u 4.0)))
         (* (- (log (fma -4.0 u 1.0))) s)))
      float code(float s, float u) {
      	float tmp;
      	if (u <= 0.0010000000474974513f) {
      		tmp = s * fmaf(8.0f, (u * u), (u * 4.0f));
      	} else {
      		tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
      	}
      	return tmp;
      }
      
      function code(s, u)
      	tmp = Float32(0.0)
      	if (u <= Float32(0.0010000000474974513))
      		tmp = Float32(s * fma(Float32(8.0), Float32(u * u), Float32(u * Float32(4.0))));
      	else
      		tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s);
      	end
      	return tmp
      end
      
      \begin{array}{l}
      \mathbf{if}\;u \leq 0.0010000000474974513:\\
      \;\;\;\;s \cdot \mathsf{fma}\left(8, u \cdot u, u \cdot 4\right)\\
      
      \mathbf{else}:\\
      \;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
      
      
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if u < 0.00100000005

        1. Initial program 61.9%

          \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
        2. Taylor expanded in u around 0

          \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
        3. Step-by-step derivation
          1. lower-*.f32N/A

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

            \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          3. lower-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          4. lower-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
          5. lower-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
          6. lower-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
          7. lower-*.f3292.9%

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
        4. Applied rewrites92.9%

          \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right)} \]
        5. Step-by-step derivation
          1. lift-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
          2. lift-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          3. +-commutativeN/A

            \[\leadsto s \cdot \left(u \cdot \left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) + \color{blue}{4}\right)\right) \]
          4. distribute-rgt-inN/A

            \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + \color{blue}{4 \cdot u}\right) \]
          5. lift-*.f32N/A

            \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + 4 \cdot u\right) \]
          6. *-commutativeN/A

            \[\leadsto s \cdot \left(\left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot u\right) \cdot u + 4 \cdot u\right) \]
          7. associate-*l*N/A

            \[\leadsto s \cdot \left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot \left(u \cdot u\right) + \color{blue}{4} \cdot u\right) \]
          8. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u \cdot u}, 4 \cdot u\right) \]
          9. lift-+.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          10. +-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          11. lift-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, u \cdot u, 4 \cdot u\right) \]
          12. *-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\left(\frac{64}{3} + 64 \cdot u\right) \cdot u + 8, u \cdot u, 4 \cdot u\right) \]
          13. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          14. lift-+.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          15. +-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          16. lift-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          17. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, 4 \cdot u\right) \]
          18. lower-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot \color{blue}{u}, 4 \cdot u\right) \]
          19. *-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
          20. lower-*.f3293.2%

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
        6. Applied rewrites93.2%

          \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), \color{blue}{u \cdot u}, u \cdot 4\right) \]
        7. Taylor expanded in u around 0

          \[\leadsto s \cdot \mathsf{fma}\left(8, \color{blue}{u} \cdot u, u \cdot 4\right) \]
        8. Step-by-step derivation
          1. Applied rewrites86.4%

            \[\leadsto s \cdot \mathsf{fma}\left(8, \color{blue}{u} \cdot u, u \cdot 4\right) \]

          if 0.00100000005 < u

          1. Initial program 61.9%

            \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
          2. Step-by-step derivation
            1. lift-*.f32N/A

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

              \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right) \cdot s} \]
            3. lower-*.f3261.9%

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

              \[\leadsto \color{blue}{\log \left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
            5. lift-/.f32N/A

              \[\leadsto \log \color{blue}{\left(\frac{1}{1 - 4 \cdot u}\right)} \cdot s \]
            6. log-recN/A

              \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\log \left(1 - 4 \cdot u\right)\right)\right)} \cdot s \]
            7. lower-log.f32N/A

              \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
            8. lower-unsound-log.f32N/A

              \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\log \left(1 - 4 \cdot u\right)}\right)\right) \cdot s \]
            9. lower-neg.f32N/A

              \[\leadsto \color{blue}{\left(-\log \left(1 - 4 \cdot u\right)\right)} \cdot s \]
            10. lower-unsound-log.f3264.3%

              \[\leadsto \left(-\color{blue}{\log \left(1 - 4 \cdot u\right)}\right) \cdot s \]
            11. lift--.f32N/A

              \[\leadsto \left(-\log \color{blue}{\left(1 - 4 \cdot u\right)}\right) \cdot s \]
            12. lift-*.f32N/A

              \[\leadsto \left(-\log \left(1 - \color{blue}{4 \cdot u}\right)\right) \cdot s \]
            13. fp-cancel-sub-sign-invN/A

              \[\leadsto \left(-\log \color{blue}{\left(1 + \left(\mathsf{neg}\left(4\right)\right) \cdot u\right)}\right) \cdot s \]
            14. +-commutativeN/A

              \[\leadsto \left(-\log \color{blue}{\left(\left(\mathsf{neg}\left(4\right)\right) \cdot u + 1\right)}\right) \cdot s \]
            15. lower-fma.f32N/A

              \[\leadsto \left(-\log \color{blue}{\left(\mathsf{fma}\left(\mathsf{neg}\left(4\right), u, 1\right)\right)}\right) \cdot s \]
            16. metadata-eval64.3%

              \[\leadsto \left(-\log \left(\mathsf{fma}\left(\color{blue}{-4}, u, 1\right)\right)\right) \cdot s \]
          3. Applied rewrites64.3%

            \[\leadsto \color{blue}{\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s} \]
        9. Recombined 2 regimes into one program.
        10. Add Preprocessing

        Alternative 8: 86.4% accurate, 1.3× speedup?

        \[s \cdot \mathsf{fma}\left(8, u \cdot u, u \cdot 4\right) \]
        (FPCore (s u) :precision binary32 (* s (fma 8.0 (* u u) (* u 4.0))))
        float code(float s, float u) {
        	return s * fmaf(8.0f, (u * u), (u * 4.0f));
        }
        
        function code(s, u)
        	return Float32(s * fma(Float32(8.0), Float32(u * u), Float32(u * Float32(4.0))))
        end
        
        s \cdot \mathsf{fma}\left(8, u \cdot u, u \cdot 4\right)
        
        Derivation
        1. Initial program 61.9%

          \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
        2. Taylor expanded in u around 0

          \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)\right)} \]
        3. Step-by-step derivation
          1. lower-*.f32N/A

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

            \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          3. lower-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \color{blue}{\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          4. lower-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + \color{blue}{u \cdot \left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
          5. lower-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \color{blue}{\left(\frac{64}{3} + 64 \cdot u\right)}\right)\right)\right) \]
          6. lower-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + \color{blue}{64 \cdot u}\right)\right)\right)\right) \]
          7. lower-*.f3292.9%

            \[\leadsto s \cdot \left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot \color{blue}{u}\right)\right)\right)\right) \]
        4. Applied rewrites92.9%

          \[\leadsto s \cdot \color{blue}{\left(u \cdot \left(4 + u \cdot \left(8 + u \cdot \left(21.333333333333332 + 64 \cdot u\right)\right)\right)\right)} \]
        5. Step-by-step derivation
          1. lift-*.f32N/A

            \[\leadsto s \cdot \left(u \cdot \color{blue}{\left(4 + u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right)}\right) \]
          2. lift-+.f32N/A

            \[\leadsto s \cdot \left(u \cdot \left(4 + \color{blue}{u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)}\right)\right) \]
          3. +-commutativeN/A

            \[\leadsto s \cdot \left(u \cdot \left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) + \color{blue}{4}\right)\right) \]
          4. distribute-rgt-inN/A

            \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + \color{blue}{4 \cdot u}\right) \]
          5. lift-*.f32N/A

            \[\leadsto s \cdot \left(\left(u \cdot \left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right)\right) \cdot u + 4 \cdot u\right) \]
          6. *-commutativeN/A

            \[\leadsto s \cdot \left(\left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot u\right) \cdot u + 4 \cdot u\right) \]
          7. associate-*l*N/A

            \[\leadsto s \cdot \left(\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right)\right) \cdot \left(u \cdot u\right) + \color{blue}{4} \cdot u\right) \]
          8. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u \cdot u}, 4 \cdot u\right) \]
          9. lift-+.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(8 + u \cdot \left(\frac{64}{3} + 64 \cdot u\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          10. +-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          11. lift-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(u \cdot \left(\frac{64}{3} + 64 \cdot u\right) + 8, u \cdot u, 4 \cdot u\right) \]
          12. *-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\left(\frac{64}{3} + 64 \cdot u\right) \cdot u + 8, u \cdot u, 4 \cdot u\right) \]
          13. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), \color{blue}{u} \cdot u, 4 \cdot u\right) \]
          14. lift-+.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{64}{3} + 64 \cdot u, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          15. +-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          16. lift-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(64 \cdot u + \frac{64}{3}, u, 8\right), u \cdot u, 4 \cdot u\right) \]
          17. lower-fma.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, 4 \cdot u\right) \]
          18. lower-*.f32N/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot \color{blue}{u}, 4 \cdot u\right) \]
          19. *-commutativeN/A

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, \frac{64}{3}\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
          20. lower-*.f3293.2%

            \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u \cdot u, u \cdot 4\right) \]
        6. Applied rewrites93.2%

          \[\leadsto s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), \color{blue}{u \cdot u}, u \cdot 4\right) \]
        7. Taylor expanded in u around 0

          \[\leadsto s \cdot \mathsf{fma}\left(8, \color{blue}{u} \cdot u, u \cdot 4\right) \]
        8. Step-by-step derivation
          1. Applied rewrites86.4%

            \[\leadsto s \cdot \mathsf{fma}\left(8, \color{blue}{u} \cdot u, u \cdot 4\right) \]
          2. Add Preprocessing

          Alternative 9: 86.4% accurate, 1.3× speedup?

          \[u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \]
          (FPCore (s u) :precision binary32 (* u (fma 4.0 s (* 8.0 (* s u)))))
          float code(float s, float u) {
          	return u * fmaf(4.0f, s, (8.0f * (s * u)));
          }
          
          function code(s, u)
          	return Float32(u * fma(Float32(4.0), s, Float32(Float32(8.0) * Float32(s * u))))
          end
          
          u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)
          
          Derivation
          1. Initial program 61.9%

            \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
          2. Taylor expanded in u around 0

            \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + 8 \cdot \left(s \cdot u\right)\right)} \]
          3. Step-by-step derivation
            1. lower-*.f32N/A

              \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + 8 \cdot \left(s \cdot u\right)\right)} \]
            2. lower-fma.f32N/A

              \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, 8 \cdot \left(s \cdot u\right)\right) \]
            3. lower-*.f32N/A

              \[\leadsto u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \]
            4. lower-*.f3286.4%

              \[\leadsto u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \]
          4. Applied rewrites86.4%

            \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)} \]
          5. Add Preprocessing

          Alternative 10: 86.3% accurate, 1.6× speedup?

          \[\left(\mathsf{fma}\left(8, u, 4\right) \cdot s\right) \cdot u \]
          (FPCore (s u) :precision binary32 (* (* (fma 8.0 u 4.0) s) u))
          float code(float s, float u) {
          	return (fmaf(8.0f, u, 4.0f) * s) * u;
          }
          
          function code(s, u)
          	return Float32(Float32(fma(Float32(8.0), u, Float32(4.0)) * s) * u)
          end
          
          \left(\mathsf{fma}\left(8, u, 4\right) \cdot s\right) \cdot u
          
          Derivation
          1. Initial program 61.9%

            \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
          2. Taylor expanded in u around 0

            \[\leadsto \color{blue}{u \cdot \left(4 \cdot s + 8 \cdot \left(s \cdot u\right)\right)} \]
          3. Step-by-step derivation
            1. lower-*.f32N/A

              \[\leadsto u \cdot \color{blue}{\left(4 \cdot s + 8 \cdot \left(s \cdot u\right)\right)} \]
            2. lower-fma.f32N/A

              \[\leadsto u \cdot \mathsf{fma}\left(4, \color{blue}{s}, 8 \cdot \left(s \cdot u\right)\right) \]
            3. lower-*.f32N/A

              \[\leadsto u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \]
            4. lower-*.f3286.4%

              \[\leadsto u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \]
          4. Applied rewrites86.4%

            \[\leadsto \color{blue}{u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)} \]
          5. Step-by-step derivation
            1. lift-*.f32N/A

              \[\leadsto u \cdot \color{blue}{\mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)} \]
            2. *-commutativeN/A

              \[\leadsto \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \cdot \color{blue}{u} \]
            3. lower-*.f3286.4%

              \[\leadsto \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right) \cdot \color{blue}{u} \]
            4. lift-fma.f32N/A

              \[\leadsto \left(4 \cdot s + 8 \cdot \left(s \cdot u\right)\right) \cdot u \]
            5. +-commutativeN/A

              \[\leadsto \left(8 \cdot \left(s \cdot u\right) + 4 \cdot s\right) \cdot u \]
            6. *-commutativeN/A

              \[\leadsto \left(8 \cdot \left(s \cdot u\right) + s \cdot 4\right) \cdot u \]
            7. lift-*.f32N/A

              \[\leadsto \left(8 \cdot \left(s \cdot u\right) + s \cdot 4\right) \cdot u \]
            8. *-commutativeN/A

              \[\leadsto \left(\left(s \cdot u\right) \cdot 8 + s \cdot 4\right) \cdot u \]
            9. lift-*.f32N/A

              \[\leadsto \left(\left(s \cdot u\right) \cdot 8 + s \cdot 4\right) \cdot u \]
            10. associate-*l*N/A

              \[\leadsto \left(s \cdot \left(u \cdot 8\right) + s \cdot 4\right) \cdot u \]
            11. distribute-lft-outN/A

              \[\leadsto \left(s \cdot \left(u \cdot 8 + 4\right)\right) \cdot u \]
            12. lower-*.f32N/A

              \[\leadsto \left(s \cdot \left(u \cdot 8 + 4\right)\right) \cdot u \]
            13. *-commutativeN/A

              \[\leadsto \left(s \cdot \left(8 \cdot u + 4\right)\right) \cdot u \]
            14. lower-fma.f3286.3%

              \[\leadsto \left(s \cdot \mathsf{fma}\left(8, u, 4\right)\right) \cdot u \]
          6. Applied rewrites86.3%

            \[\leadsto \left(s \cdot \mathsf{fma}\left(8, u, 4\right)\right) \cdot \color{blue}{u} \]
          7. Step-by-step derivation
            1. lift-*.f32N/A

              \[\leadsto \left(s \cdot \mathsf{fma}\left(8, u, 4\right)\right) \cdot u \]
            2. *-commutativeN/A

              \[\leadsto \left(\mathsf{fma}\left(8, u, 4\right) \cdot s\right) \cdot u \]
            3. lower-*.f3286.3%

              \[\leadsto \left(\mathsf{fma}\left(8, u, 4\right) \cdot s\right) \cdot u \]
          8. Applied rewrites86.3%

            \[\leadsto \left(\mathsf{fma}\left(8, u, 4\right) \cdot s\right) \cdot \color{blue}{u} \]
          9. Add Preprocessing

          Alternative 11: 73.4% accurate, 2.7× speedup?

          \[s \cdot \left(4 \cdot u\right) \]
          (FPCore (s u) :precision binary32 (* s (* 4.0 u)))
          float code(float s, float u) {
          	return s * (4.0f * u);
          }
          
          module fmin_fmax_functions
              implicit none
              private
              public fmax
              public fmin
          
              interface fmax
                  module procedure fmax88
                  module procedure fmax44
                  module procedure fmax84
                  module procedure fmax48
              end interface
              interface fmin
                  module procedure fmin88
                  module procedure fmin44
                  module procedure fmin84
                  module procedure fmin48
              end interface
          contains
              real(8) function fmax88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(4) function fmax44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(8) function fmax84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmax48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
              end function
              real(8) function fmin88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(4) function fmin44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(8) function fmin84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmin48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
              end function
          end module
          
          real(4) function code(s, u)
          use fmin_fmax_functions
              real(4), intent (in) :: s
              real(4), intent (in) :: u
              code = s * (4.0e0 * u)
          end function
          
          function code(s, u)
          	return Float32(s * Float32(Float32(4.0) * u))
          end
          
          function tmp = code(s, u)
          	tmp = s * (single(4.0) * u);
          end
          
          s \cdot \left(4 \cdot u\right)
          
          Derivation
          1. Initial program 61.9%

            \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
          2. Taylor expanded in u around 0

            \[\leadsto s \cdot \color{blue}{\left(4 \cdot u\right)} \]
          3. Step-by-step derivation
            1. lower-*.f3273.4%

              \[\leadsto s \cdot \left(4 \cdot \color{blue}{u}\right) \]
          4. Applied rewrites73.4%

            \[\leadsto s \cdot \color{blue}{\left(4 \cdot u\right)} \]
          5. Add Preprocessing

          Alternative 12: 73.1% accurate, 2.7× speedup?

          \[4 \cdot \left(s \cdot u\right) \]
          (FPCore (s u) :precision binary32 (* 4.0 (* s u)))
          float code(float s, float u) {
          	return 4.0f * (s * u);
          }
          
          module fmin_fmax_functions
              implicit none
              private
              public fmax
              public fmin
          
              interface fmax
                  module procedure fmax88
                  module procedure fmax44
                  module procedure fmax84
                  module procedure fmax48
              end interface
              interface fmin
                  module procedure fmin88
                  module procedure fmin44
                  module procedure fmin84
                  module procedure fmin48
              end interface
          contains
              real(8) function fmax88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(4) function fmax44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, max(x, y), y /= y), x /= x)
              end function
              real(8) function fmax84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmax48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
              end function
              real(8) function fmin88(x, y) result (res)
                  real(8), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(4) function fmin44(x, y) result (res)
                  real(4), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(y, merge(x, min(x, y), y /= y), x /= x)
              end function
              real(8) function fmin84(x, y) result(res)
                  real(8), intent (in) :: x
                  real(4), intent (in) :: y
                  res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
              end function
              real(8) function fmin48(x, y) result(res)
                  real(4), intent (in) :: x
                  real(8), intent (in) :: y
                  res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
              end function
          end module
          
          real(4) function code(s, u)
          use fmin_fmax_functions
              real(4), intent (in) :: s
              real(4), intent (in) :: u
              code = 4.0e0 * (s * u)
          end function
          
          function code(s, u)
          	return Float32(Float32(4.0) * Float32(s * u))
          end
          
          function tmp = code(s, u)
          	tmp = single(4.0) * (s * u);
          end
          
          4 \cdot \left(s \cdot u\right)
          
          Derivation
          1. Initial program 61.9%

            \[s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right) \]
          2. Taylor expanded in u around 0

            \[\leadsto \color{blue}{4 \cdot \left(s \cdot u\right)} \]
          3. Step-by-step derivation
            1. lower-*.f32N/A

              \[\leadsto 4 \cdot \color{blue}{\left(s \cdot u\right)} \]
            2. lower-*.f3273.1%

              \[\leadsto 4 \cdot \left(s \cdot \color{blue}{u}\right) \]
          4. Applied rewrites73.1%

            \[\leadsto \color{blue}{4 \cdot \left(s \cdot u\right)} \]
          5. Add Preprocessing

          Reproduce

          ?
          herbie shell --seed 2025179 
          (FPCore (s u)
            :name "Disney BSSRDF, sample scattering profile, lower"
            :precision binary32
            :pre (and (and (<= 0.0 s) (<= s 256.0)) (and (<= 2.328306437e-10 u) (<= u 0.25)))
            (* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))