System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2

Percentage Accurate: 99.9% → 99.9%
Time: 11.3s
Alternatives: 9
Speedup: 1.0×

Specification

?
\[\begin{array}{l} \\ x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \end{array} \]
(FPCore (x y z) :precision binary64 (+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))
double code(double x, double y, double z) {
	return (x * 0.5) + (y * ((1.0 - z) + log(z)));
}
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = (x * 0.5d0) + (y * ((1.0d0 - z) + log(z)))
end function
public static double code(double x, double y, double z) {
	return (x * 0.5) + (y * ((1.0 - z) + Math.log(z)));
}
def code(x, y, z):
	return (x * 0.5) + (y * ((1.0 - z) + math.log(z)))
function code(x, y, z)
	return Float64(Float64(x * 0.5) + Float64(y * Float64(Float64(1.0 - z) + log(z))))
end
function tmp = code(x, y, z)
	tmp = (x * 0.5) + (y * ((1.0 - z) + log(z)));
end
code[x_, y_, z_] := N[(N[(x * 0.5), $MachinePrecision] + N[(y * N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\end{array}

Sampling outcomes in binary64 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 9 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.9% accurate, 1.0× speedup?

\[\begin{array}{l} \\ x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \end{array} \]
(FPCore (x y z) :precision binary64 (+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))
double code(double x, double y, double z) {
	return (x * 0.5) + (y * ((1.0 - z) + log(z)));
}
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = (x * 0.5d0) + (y * ((1.0d0 - z) + log(z)))
end function
public static double code(double x, double y, double z) {
	return (x * 0.5) + (y * ((1.0 - z) + Math.log(z)));
}
def code(x, y, z):
	return (x * 0.5) + (y * ((1.0 - z) + math.log(z)))
function code(x, y, z)
	return Float64(Float64(x * 0.5) + Float64(y * Float64(Float64(1.0 - z) + log(z))))
end
function tmp = code(x, y, z)
	tmp = (x * 0.5) + (y * ((1.0 - z) + log(z)));
end
code[x_, y_, z_] := N[(N[(x * 0.5), $MachinePrecision] + N[(y * N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\end{array}

Alternative 1: 99.9% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)\right) \end{array} \]
(FPCore (x y z)
 :precision binary64
 (fma (log z) y (fma (- 1.0 z) y (* x 0.5))))
double code(double x, double y, double z) {
	return fma(log(z), y, fma((1.0 - z), y, (x * 0.5)));
}
function code(x, y, z)
	return fma(log(z), y, fma(Float64(1.0 - z), y, Float64(x * 0.5)))
end
code[x_, y_, z_] := N[(N[Log[z], $MachinePrecision] * y + N[(N[(1.0 - z), $MachinePrecision] * y + N[(x * 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)\right)
\end{array}
Derivation
  1. Initial program 99.9%

    \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-+.f64N/A

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

      \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
    3. lift-*.f64N/A

      \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
    4. lift-+.f64N/A

      \[\leadsto y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
    5. +-commutativeN/A

      \[\leadsto y \cdot \color{blue}{\left(\log z + \left(1 - z\right)\right)} + x \cdot \frac{1}{2} \]
    6. distribute-rgt-inN/A

      \[\leadsto \color{blue}{\left(\log z \cdot y + \left(1 - z\right) \cdot y\right)} + x \cdot \frac{1}{2} \]
    7. associate-+l+N/A

      \[\leadsto \color{blue}{\log z \cdot y + \left(\left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
    8. lower-fma.f64N/A

      \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
    9. lower-fma.f6499.9

      \[\leadsto \mathsf{fma}\left(\log z, y, \color{blue}{\mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)}\right) \]
    10. lift-*.f64N/A

      \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{x \cdot \frac{1}{2}}\right)\right) \]
    11. *-commutativeN/A

      \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{\frac{1}{2} \cdot x}\right)\right) \]
    12. lower-*.f6499.9

      \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{0.5 \cdot x}\right)\right) \]
  4. Applied rewrites99.9%

    \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, 0.5 \cdot x\right)\right)} \]
  5. Final simplification99.9%

    \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)\right) \]
  6. Add Preprocessing

Alternative 2: 75.0% accurate, 0.3× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(\log z, y, y\right)\\ t_1 := \left(1 - z\right) + \log z\\ \mathbf{if}\;t\_1 \leq -628.12:\\ \;\;\;\;\mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right)\\ \mathbf{elif}\;t\_1 \leq -417:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;t\_1 \leq -250:\\ \;\;\;\;\left(0.5 - \frac{y}{x}\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \]
(FPCore (x y z)
 :precision binary64
 (let* ((t_0 (fma (log z) y y)) (t_1 (+ (- 1.0 z) (log z))))
   (if (<= t_1 -628.12)
     (fma 0.5 x (* (- z) y))
     (if (<= t_1 -417.0) t_0 (if (<= t_1 -250.0) (* (- 0.5 (/ y x)) x) t_0)))))
double code(double x, double y, double z) {
	double t_0 = fma(log(z), y, y);
	double t_1 = (1.0 - z) + log(z);
	double tmp;
	if (t_1 <= -628.12) {
		tmp = fma(0.5, x, (-z * y));
	} else if (t_1 <= -417.0) {
		tmp = t_0;
	} else if (t_1 <= -250.0) {
		tmp = (0.5 - (y / x)) * x;
	} else {
		tmp = t_0;
	}
	return tmp;
}
function code(x, y, z)
	t_0 = fma(log(z), y, y)
	t_1 = Float64(Float64(1.0 - z) + log(z))
	tmp = 0.0
	if (t_1 <= -628.12)
		tmp = fma(0.5, x, Float64(Float64(-z) * y));
	elseif (t_1 <= -417.0)
		tmp = t_0;
	elseif (t_1 <= -250.0)
		tmp = Float64(Float64(0.5 - Float64(y / x)) * x);
	else
		tmp = t_0;
	end
	return tmp
end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[Log[z], $MachinePrecision] * y + y), $MachinePrecision]}, Block[{t$95$1 = N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -628.12], N[(0.5 * x + N[((-z) * y), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -417.0], t$95$0, If[LessEqual[t$95$1, -250.0], N[(N[(0.5 - N[(y / x), $MachinePrecision]), $MachinePrecision] * x), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(\log z, y, y\right)\\
t_1 := \left(1 - z\right) + \log z\\
\mathbf{if}\;t\_1 \leq -628.12:\\
\;\;\;\;\mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right)\\

\mathbf{elif}\;t\_1 \leq -417:\\
\;\;\;\;t\_0\\

\mathbf{elif}\;t\_1 \leq -250:\\
\;\;\;\;\left(0.5 - \frac{y}{x}\right) \cdot x\\

\mathbf{else}:\\
\;\;\;\;t\_0\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z)) < -628.120000000000005

    1. Initial program 99.9%

      \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-+.f64N/A

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

        \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
      3. lift-*.f64N/A

        \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
      4. lift-+.f64N/A

        \[\leadsto y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
      5. +-commutativeN/A

        \[\leadsto y \cdot \color{blue}{\left(\log z + \left(1 - z\right)\right)} + x \cdot \frac{1}{2} \]
      6. distribute-rgt-inN/A

        \[\leadsto \color{blue}{\left(\log z \cdot y + \left(1 - z\right) \cdot y\right)} + x \cdot \frac{1}{2} \]
      7. associate-+l+N/A

        \[\leadsto \color{blue}{\log z \cdot y + \left(\left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
      8. lower-fma.f64N/A

        \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
      9. lower-fma.f64100.0

        \[\leadsto \mathsf{fma}\left(\log z, y, \color{blue}{\mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)}\right) \]
      10. lift-*.f64N/A

        \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{x \cdot \frac{1}{2}}\right)\right) \]
      11. *-commutativeN/A

        \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{\frac{1}{2} \cdot x}\right)\right) \]
      12. lower-*.f64100.0

        \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{0.5 \cdot x}\right)\right) \]
    4. Applied rewrites100.0%

      \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, 0.5 \cdot x\right)\right)} \]
    5. Taylor expanded in z around 0

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

        \[\leadsto \color{blue}{\left(-1 \cdot \left(y \cdot z\right) + \left(\frac{1}{2} \cdot x + y \cdot \log z\right)\right) + y} \]
      2. associate-+r+N/A

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

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

        \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right)} + \left(y \cdot \log z + y\right) \]
      5. *-rgt-identityN/A

        \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \left(y \cdot \log z + \color{blue}{y \cdot 1}\right) \]
      6. distribute-lft-inN/A

        \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \color{blue}{y \cdot \left(\log z + 1\right)} \]
      7. +-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + y \cdot \color{blue}{\left(1 + \log z\right)} \]
      8. associate-+l+N/A

        \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(-1 \cdot \left(y \cdot z\right) + y \cdot \left(1 + \log z\right)\right)} \]
      9. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot x + \color{blue}{\left(y \cdot \left(1 + \log z\right) + -1 \cdot \left(y \cdot z\right)\right)} \]
      10. mul-1-negN/A

        \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{\left(\mathsf{neg}\left(y \cdot z\right)\right)}\right) \]
      11. distribute-rgt-neg-inN/A

        \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{y \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
      12. distribute-lft-inN/A

        \[\leadsto \frac{1}{2} \cdot x + \color{blue}{y \cdot \left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)} \]
      13. sub-negN/A

        \[\leadsto \frac{1}{2} \cdot x + y \cdot \color{blue}{\left(\left(1 + \log z\right) - z\right)} \]
      14. lower-fma.f64N/A

        \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(\left(1 + \log z\right) - z\right)\right)} \]
      15. sub-negN/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)}\right) \]
      16. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)}\right) \]
      17. mul-1-negN/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right)\right) \]
      18. +-commutativeN/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)}\right) \]
    7. Applied rewrites99.9%

      \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)} \]
    8. Taylor expanded in z around inf

      \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, -1 \cdot \left(y \cdot z\right)\right) \]
    9. Step-by-step derivation
      1. Applied rewrites93.0%

        \[\leadsto \mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right) \]

      if -628.120000000000005 < (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z)) < -417 or -250 < (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z))

      1. Initial program 99.7%

        \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
      2. Add Preprocessing
      3. Taylor expanded in z around 0

        \[\leadsto \color{blue}{\frac{1}{2} \cdot x + y \cdot \left(1 + \log z\right)} \]
      4. Step-by-step derivation
        1. lower-fma.f64N/A

          \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \log z\right)\right)} \]
        2. +-commutativeN/A

          \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\log z + 1\right)}\right) \]
        3. distribute-rgt-inN/A

          \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\log z \cdot y + 1 \cdot y}\right) \]
        4. *-lft-identityN/A

          \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \log z \cdot y + \color{blue}{y}\right) \]
        5. lower-fma.f64N/A

          \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\mathsf{fma}\left(\log z, y, y\right)}\right) \]
        6. lower-log.f6496.0

          \[\leadsto \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\color{blue}{\log z}, y, y\right)\right) \]
      5. Applied rewrites96.0%

        \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z, y, y\right)\right)} \]
      6. Taylor expanded in y around inf

        \[\leadsto y \cdot \color{blue}{\left(1 + \log z\right)} \]
      7. Step-by-step derivation
        1. Applied rewrites63.9%

          \[\leadsto \mathsf{fma}\left(\log z, \color{blue}{y}, y\right) \]

        if -417 < (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z)) < -250

        1. Initial program 99.8%

          \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-+.f64N/A

            \[\leadsto \color{blue}{x \cdot \frac{1}{2} + y \cdot \left(\left(1 - z\right) + \log z\right)} \]
          2. lift-*.f64N/A

            \[\leadsto x \cdot \frac{1}{2} + \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} \]
          3. lift-+.f64N/A

            \[\leadsto x \cdot \frac{1}{2} + y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} \]
          4. distribute-rgt-inN/A

            \[\leadsto x \cdot \frac{1}{2} + \color{blue}{\left(\left(1 - z\right) \cdot y + \log z \cdot y\right)} \]
          5. associate-+r+N/A

            \[\leadsto \color{blue}{\left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) + \log z \cdot y} \]
          6. flip-+N/A

            \[\leadsto \color{blue}{\frac{\left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) \cdot \left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) - \left(\log z \cdot y\right) \cdot \left(\log z \cdot y\right)}{\left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) - \log z \cdot y}} \]
          7. lower-/.f64N/A

            \[\leadsto \color{blue}{\frac{\left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) \cdot \left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) - \left(\log z \cdot y\right) \cdot \left(\log z \cdot y\right)}{\left(x \cdot \frac{1}{2} + \left(1 - z\right) \cdot y\right) - \log z \cdot y}} \]
        4. Applied rewrites55.2%

          \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(0.5, x, \left(1 - z\right) \cdot y\right) \cdot \mathsf{fma}\left(0.5, x, \left(1 - z\right) \cdot y\right) - {\left(\log z \cdot y\right)}^{2}}{\mathsf{fma}\left(0.5, x, \left(1 - z\right) \cdot y\right) - \log z \cdot y}} \]
        5. Taylor expanded in x around inf

          \[\leadsto \color{blue}{x \cdot \left(\left(\frac{1}{2} + \left(2 \cdot \frac{y \cdot \left(1 - z\right)}{x} + \frac{y \cdot \log z}{x}\right)\right) - \frac{y \cdot \left(1 - z\right)}{x}\right)} \]
        6. Step-by-step derivation
          1. *-commutativeN/A

            \[\leadsto \color{blue}{\left(\left(\frac{1}{2} + \left(2 \cdot \frac{y \cdot \left(1 - z\right)}{x} + \frac{y \cdot \log z}{x}\right)\right) - \frac{y \cdot \left(1 - z\right)}{x}\right) \cdot x} \]
          2. lower-*.f64N/A

            \[\leadsto \color{blue}{\left(\left(\frac{1}{2} + \left(2 \cdot \frac{y \cdot \left(1 - z\right)}{x} + \frac{y \cdot \log z}{x}\right)\right) - \frac{y \cdot \left(1 - z\right)}{x}\right) \cdot x} \]
        7. Applied rewrites93.2%

          \[\leadsto \color{blue}{\left(\mathsf{fma}\left(2 \cdot y, \frac{1 - z}{x}, \mathsf{fma}\left(\log z, \frac{y}{x}, 0.5\right)\right) - \frac{\left(1 - z\right) \cdot y}{x}\right) \cdot x} \]
        8. Taylor expanded in y around 0

          \[\leadsto \left(\frac{1}{2} - \frac{\left(1 - z\right) \cdot y}{x}\right) \cdot x \]
        9. Step-by-step derivation
          1. Applied rewrites74.5%

            \[\leadsto \left(0.5 - \frac{\left(1 - z\right) \cdot y}{x}\right) \cdot x \]
          2. Taylor expanded in z around 0

            \[\leadsto \left(\frac{1}{2} - \frac{y}{x}\right) \cdot x \]
          3. Step-by-step derivation
            1. Applied rewrites74.5%

              \[\leadsto \left(0.5 - \frac{y}{x}\right) \cdot x \]
          4. Recombined 3 regimes into one program.
          5. Add Preprocessing

          Alternative 3: 61.0% accurate, 0.5× speedup?

          \[\begin{array}{l} \\ \begin{array}{l} t_0 := \left(\left(1 - z\right) + \log z\right) \cdot y\\ t_1 := \left(-z\right) \cdot y\\ \mathbf{if}\;t\_0 \leq -5 \cdot 10^{+51}:\\ \;\;\;\;t\_1\\ \mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+132}:\\ \;\;\;\;x \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;t\_1\\ \end{array} \end{array} \]
          (FPCore (x y z)
           :precision binary64
           (let* ((t_0 (* (+ (- 1.0 z) (log z)) y)) (t_1 (* (- z) y)))
             (if (<= t_0 -5e+51) t_1 (if (<= t_0 2e+132) (* x 0.5) t_1))))
          double code(double x, double y, double z) {
          	double t_0 = ((1.0 - z) + log(z)) * y;
          	double t_1 = -z * y;
          	double tmp;
          	if (t_0 <= -5e+51) {
          		tmp = t_1;
          	} else if (t_0 <= 2e+132) {
          		tmp = x * 0.5;
          	} else {
          		tmp = t_1;
          	}
          	return tmp;
          }
          
          real(8) function code(x, y, z)
              real(8), intent (in) :: x
              real(8), intent (in) :: y
              real(8), intent (in) :: z
              real(8) :: t_0
              real(8) :: t_1
              real(8) :: tmp
              t_0 = ((1.0d0 - z) + log(z)) * y
              t_1 = -z * y
              if (t_0 <= (-5d+51)) then
                  tmp = t_1
              else if (t_0 <= 2d+132) then
                  tmp = x * 0.5d0
              else
                  tmp = t_1
              end if
              code = tmp
          end function
          
          public static double code(double x, double y, double z) {
          	double t_0 = ((1.0 - z) + Math.log(z)) * y;
          	double t_1 = -z * y;
          	double tmp;
          	if (t_0 <= -5e+51) {
          		tmp = t_1;
          	} else if (t_0 <= 2e+132) {
          		tmp = x * 0.5;
          	} else {
          		tmp = t_1;
          	}
          	return tmp;
          }
          
          def code(x, y, z):
          	t_0 = ((1.0 - z) + math.log(z)) * y
          	t_1 = -z * y
          	tmp = 0
          	if t_0 <= -5e+51:
          		tmp = t_1
          	elif t_0 <= 2e+132:
          		tmp = x * 0.5
          	else:
          		tmp = t_1
          	return tmp
          
          function code(x, y, z)
          	t_0 = Float64(Float64(Float64(1.0 - z) + log(z)) * y)
          	t_1 = Float64(Float64(-z) * y)
          	tmp = 0.0
          	if (t_0 <= -5e+51)
          		tmp = t_1;
          	elseif (t_0 <= 2e+132)
          		tmp = Float64(x * 0.5);
          	else
          		tmp = t_1;
          	end
          	return tmp
          end
          
          function tmp_2 = code(x, y, z)
          	t_0 = ((1.0 - z) + log(z)) * y;
          	t_1 = -z * y;
          	tmp = 0.0;
          	if (t_0 <= -5e+51)
          		tmp = t_1;
          	elseif (t_0 <= 2e+132)
          		tmp = x * 0.5;
          	else
          		tmp = t_1;
          	end
          	tmp_2 = tmp;
          end
          
          code[x_, y_, z_] := Block[{t$95$0 = N[(N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision] * y), $MachinePrecision]}, Block[{t$95$1 = N[((-z) * y), $MachinePrecision]}, If[LessEqual[t$95$0, -5e+51], t$95$1, If[LessEqual[t$95$0, 2e+132], N[(x * 0.5), $MachinePrecision], t$95$1]]]]
          
          \begin{array}{l}
          
          \\
          \begin{array}{l}
          t_0 := \left(\left(1 - z\right) + \log z\right) \cdot y\\
          t_1 := \left(-z\right) \cdot y\\
          \mathbf{if}\;t\_0 \leq -5 \cdot 10^{+51}:\\
          \;\;\;\;t\_1\\
          
          \mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+132}:\\
          \;\;\;\;x \cdot 0.5\\
          
          \mathbf{else}:\\
          \;\;\;\;t\_1\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if (*.f64 y (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z))) < -5e51 or 1.99999999999999998e132 < (*.f64 y (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z)))

            1. Initial program 99.9%

              \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
            2. Add Preprocessing
            3. Taylor expanded in z around inf

              \[\leadsto \color{blue}{-1 \cdot \left(y \cdot z\right)} \]
            4. Step-by-step derivation
              1. mul-1-negN/A

                \[\leadsto \color{blue}{\mathsf{neg}\left(y \cdot z\right)} \]
              2. *-commutativeN/A

                \[\leadsto \mathsf{neg}\left(\color{blue}{z \cdot y}\right) \]
              3. distribute-lft-neg-inN/A

                \[\leadsto \color{blue}{\left(\mathsf{neg}\left(z\right)\right) \cdot y} \]
              4. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(\mathsf{neg}\left(z\right)\right) \cdot y} \]
              5. lower-neg.f6459.5

                \[\leadsto \color{blue}{\left(-z\right)} \cdot y \]
            5. Applied rewrites59.5%

              \[\leadsto \color{blue}{\left(-z\right) \cdot y} \]

            if -5e51 < (*.f64 y (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z))) < 1.99999999999999998e132

            1. Initial program 99.9%

              \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
            2. Add Preprocessing
            3. Taylor expanded in y around 0

              \[\leadsto \color{blue}{\frac{1}{2} \cdot x} \]
            4. Step-by-step derivation
              1. lower-*.f6465.6

                \[\leadsto \color{blue}{0.5 \cdot x} \]
            5. Applied rewrites65.6%

              \[\leadsto \color{blue}{0.5 \cdot x} \]
          3. Recombined 2 regimes into one program.
          4. Final simplification62.5%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\left(1 - z\right) + \log z\right) \cdot y \leq -5 \cdot 10^{+51}:\\ \;\;\;\;\left(-z\right) \cdot y\\ \mathbf{elif}\;\left(\left(1 - z\right) + \log z\right) \cdot y \leq 2 \cdot 10^{+132}:\\ \;\;\;\;x \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\left(-z\right) \cdot y\\ \end{array} \]
          5. Add Preprocessing

          Alternative 4: 98.5% accurate, 0.5× speedup?

          \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\left(1 - z\right) + \log z \leq -100000000:\\ \;\;\;\;\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(-z, y, y\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z, y, y\right)\right)\\ \end{array} \end{array} \]
          (FPCore (x y z)
           :precision binary64
           (if (<= (+ (- 1.0 z) (log z)) -100000000.0)
             (fma 0.5 x (fma (- z) y y))
             (fma 0.5 x (fma (log z) y y))))
          double code(double x, double y, double z) {
          	double tmp;
          	if (((1.0 - z) + log(z)) <= -100000000.0) {
          		tmp = fma(0.5, x, fma(-z, y, y));
          	} else {
          		tmp = fma(0.5, x, fma(log(z), y, y));
          	}
          	return tmp;
          }
          
          function code(x, y, z)
          	tmp = 0.0
          	if (Float64(Float64(1.0 - z) + log(z)) <= -100000000.0)
          		tmp = fma(0.5, x, fma(Float64(-z), y, y));
          	else
          		tmp = fma(0.5, x, fma(log(z), y, y));
          	end
          	return tmp
          end
          
          code[x_, y_, z_] := If[LessEqual[N[(N[(1.0 - z), $MachinePrecision] + N[Log[z], $MachinePrecision]), $MachinePrecision], -100000000.0], N[(0.5 * x + N[((-z) * y + y), $MachinePrecision]), $MachinePrecision], N[(0.5 * x + N[(N[Log[z], $MachinePrecision] * y + y), $MachinePrecision]), $MachinePrecision]]
          
          \begin{array}{l}
          
          \\
          \begin{array}{l}
          \mathbf{if}\;\left(1 - z\right) + \log z \leq -100000000:\\
          \;\;\;\;\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(-z, y, y\right)\right)\\
          
          \mathbf{else}:\\
          \;\;\;\;\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z, y, y\right)\right)\\
          
          
          \end{array}
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z)) < -1e8

            1. Initial program 100.0%

              \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
            2. Add Preprocessing
            3. Step-by-step derivation
              1. lift-+.f64N/A

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

                \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
              3. lift-*.f64N/A

                \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
              4. lift-+.f64N/A

                \[\leadsto y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
              5. +-commutativeN/A

                \[\leadsto y \cdot \color{blue}{\left(\log z + \left(1 - z\right)\right)} + x \cdot \frac{1}{2} \]
              6. distribute-rgt-inN/A

                \[\leadsto \color{blue}{\left(\log z \cdot y + \left(1 - z\right) \cdot y\right)} + x \cdot \frac{1}{2} \]
              7. associate-+l+N/A

                \[\leadsto \color{blue}{\log z \cdot y + \left(\left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
              8. lower-fma.f64N/A

                \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
              9. lower-fma.f64100.0

                \[\leadsto \mathsf{fma}\left(\log z, y, \color{blue}{\mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)}\right) \]
              10. lift-*.f64N/A

                \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{x \cdot \frac{1}{2}}\right)\right) \]
              11. *-commutativeN/A

                \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{\frac{1}{2} \cdot x}\right)\right) \]
              12. lower-*.f64100.0

                \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{0.5 \cdot x}\right)\right) \]
            4. Applied rewrites100.0%

              \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, 0.5 \cdot x\right)\right)} \]
            5. Taylor expanded in z around 0

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

                \[\leadsto \color{blue}{\left(-1 \cdot \left(y \cdot z\right) + \left(\frac{1}{2} \cdot x + y \cdot \log z\right)\right) + y} \]
              2. associate-+r+N/A

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

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

                \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right)} + \left(y \cdot \log z + y\right) \]
              5. *-rgt-identityN/A

                \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \left(y \cdot \log z + \color{blue}{y \cdot 1}\right) \]
              6. distribute-lft-inN/A

                \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \color{blue}{y \cdot \left(\log z + 1\right)} \]
              7. +-commutativeN/A

                \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + y \cdot \color{blue}{\left(1 + \log z\right)} \]
              8. associate-+l+N/A

                \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(-1 \cdot \left(y \cdot z\right) + y \cdot \left(1 + \log z\right)\right)} \]
              9. +-commutativeN/A

                \[\leadsto \frac{1}{2} \cdot x + \color{blue}{\left(y \cdot \left(1 + \log z\right) + -1 \cdot \left(y \cdot z\right)\right)} \]
              10. mul-1-negN/A

                \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{\left(\mathsf{neg}\left(y \cdot z\right)\right)}\right) \]
              11. distribute-rgt-neg-inN/A

                \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{y \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
              12. distribute-lft-inN/A

                \[\leadsto \frac{1}{2} \cdot x + \color{blue}{y \cdot \left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)} \]
              13. sub-negN/A

                \[\leadsto \frac{1}{2} \cdot x + y \cdot \color{blue}{\left(\left(1 + \log z\right) - z\right)} \]
              14. lower-fma.f64N/A

                \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(\left(1 + \log z\right) - z\right)\right)} \]
              15. sub-negN/A

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)}\right) \]
              16. associate-+r+N/A

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)}\right) \]
              17. mul-1-negN/A

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right)\right) \]
              18. +-commutativeN/A

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)}\right) \]
            7. Applied rewrites100.0%

              \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)} \]
            8. Taylor expanded in z around inf

              \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \mathsf{fma}\left(-1 \cdot z, y, y\right)\right) \]
            9. Step-by-step derivation
              1. Applied rewrites99.6%

                \[\leadsto \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(-z, y, y\right)\right) \]

              if -1e8 < (+.f64 (-.f64 #s(literal 1 binary64) z) (log.f64 z))

              1. Initial program 99.8%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Taylor expanded in z around 0

                \[\leadsto \color{blue}{\frac{1}{2} \cdot x + y \cdot \left(1 + \log z\right)} \]
              4. Step-by-step derivation
                1. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \log z\right)\right)} \]
                2. +-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\log z + 1\right)}\right) \]
                3. distribute-rgt-inN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\log z \cdot y + 1 \cdot y}\right) \]
                4. *-lft-identityN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \log z \cdot y + \color{blue}{y}\right) \]
                5. lower-fma.f64N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\mathsf{fma}\left(\log z, y, y\right)}\right) \]
                6. lower-log.f6497.6

                  \[\leadsto \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\color{blue}{\log z}, y, y\right)\right) \]
              5. Applied rewrites97.6%

                \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z, y, y\right)\right)} \]
            10. Recombined 2 regimes into one program.
            11. Add Preprocessing

            Alternative 5: 85.1% accurate, 1.0× speedup?

            \[\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(\log z - z, y, y\right)\\ \mathbf{if}\;y \leq -3.8 \cdot 10^{+93}:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;y \leq 3.8 \cdot 10^{+49}:\\ \;\;\;\;\mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \]
            (FPCore (x y z)
             :precision binary64
             (let* ((t_0 (fma (- (log z) z) y y)))
               (if (<= y -3.8e+93) t_0 (if (<= y 3.8e+49) (fma 0.5 x (* (- z) y)) t_0))))
            double code(double x, double y, double z) {
            	double t_0 = fma((log(z) - z), y, y);
            	double tmp;
            	if (y <= -3.8e+93) {
            		tmp = t_0;
            	} else if (y <= 3.8e+49) {
            		tmp = fma(0.5, x, (-z * y));
            	} else {
            		tmp = t_0;
            	}
            	return tmp;
            }
            
            function code(x, y, z)
            	t_0 = fma(Float64(log(z) - z), y, y)
            	tmp = 0.0
            	if (y <= -3.8e+93)
            		tmp = t_0;
            	elseif (y <= 3.8e+49)
            		tmp = fma(0.5, x, Float64(Float64(-z) * y));
            	else
            		tmp = t_0;
            	end
            	return tmp
            end
            
            code[x_, y_, z_] := Block[{t$95$0 = N[(N[(N[Log[z], $MachinePrecision] - z), $MachinePrecision] * y + y), $MachinePrecision]}, If[LessEqual[y, -3.8e+93], t$95$0, If[LessEqual[y, 3.8e+49], N[(0.5 * x + N[((-z) * y), $MachinePrecision]), $MachinePrecision], t$95$0]]]
            
            \begin{array}{l}
            
            \\
            \begin{array}{l}
            t_0 := \mathsf{fma}\left(\log z - z, y, y\right)\\
            \mathbf{if}\;y \leq -3.8 \cdot 10^{+93}:\\
            \;\;\;\;t\_0\\
            
            \mathbf{elif}\;y \leq 3.8 \cdot 10^{+49}:\\
            \;\;\;\;\mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right)\\
            
            \mathbf{else}:\\
            \;\;\;\;t\_0\\
            
            
            \end{array}
            \end{array}
            
            Derivation
            1. Split input into 2 regimes
            2. if y < -3.7999999999999998e93 or 3.7999999999999999e49 < y

              1. Initial program 99.8%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Taylor expanded in y around inf

                \[\leadsto \color{blue}{y \cdot \left(\left(1 + \log z\right) - z\right)} \]
              4. Step-by-step derivation
                1. sub-negN/A

                  \[\leadsto y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)} \]
                2. associate-+r+N/A

                  \[\leadsto y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)} \]
                3. mul-1-negN/A

                  \[\leadsto y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right) \]
                4. +-commutativeN/A

                  \[\leadsto y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)} \]
                5. distribute-rgt-inN/A

                  \[\leadsto \color{blue}{\left(\log z + -1 \cdot z\right) \cdot y + 1 \cdot y} \]
                6. *-lft-identityN/A

                  \[\leadsto \left(\log z + -1 \cdot z\right) \cdot y + \color{blue}{y} \]
                7. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\log z + -1 \cdot z, y, y\right)} \]
                8. mul-1-negN/A

                  \[\leadsto \mathsf{fma}\left(\log z + \color{blue}{\left(\mathsf{neg}\left(z\right)\right)}, y, y\right) \]
                9. sub-negN/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\log z - z}, y, y\right) \]
                10. lower--.f64N/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\log z - z}, y, y\right) \]
                11. lower-log.f6492.7

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\log z} - z, y, y\right) \]
              5. Applied rewrites92.7%

                \[\leadsto \color{blue}{\mathsf{fma}\left(\log z - z, y, y\right)} \]

              if -3.7999999999999998e93 < y < 3.7999999999999999e49

              1. Initial program 99.9%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Step-by-step derivation
                1. lift-+.f64N/A

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

                  \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
                3. lift-*.f64N/A

                  \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
                4. lift-+.f64N/A

                  \[\leadsto y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
                5. +-commutativeN/A

                  \[\leadsto y \cdot \color{blue}{\left(\log z + \left(1 - z\right)\right)} + x \cdot \frac{1}{2} \]
                6. distribute-rgt-inN/A

                  \[\leadsto \color{blue}{\left(\log z \cdot y + \left(1 - z\right) \cdot y\right)} + x \cdot \frac{1}{2} \]
                7. associate-+l+N/A

                  \[\leadsto \color{blue}{\log z \cdot y + \left(\left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
                8. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
                9. lower-fma.f6499.9

                  \[\leadsto \mathsf{fma}\left(\log z, y, \color{blue}{\mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)}\right) \]
                10. lift-*.f64N/A

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{x \cdot \frac{1}{2}}\right)\right) \]
                11. *-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{\frac{1}{2} \cdot x}\right)\right) \]
                12. lower-*.f6499.9

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{0.5 \cdot x}\right)\right) \]
              4. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, 0.5 \cdot x\right)\right)} \]
              5. Taylor expanded in z around 0

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

                  \[\leadsto \color{blue}{\left(-1 \cdot \left(y \cdot z\right) + \left(\frac{1}{2} \cdot x + y \cdot \log z\right)\right) + y} \]
                2. associate-+r+N/A

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

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

                  \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right)} + \left(y \cdot \log z + y\right) \]
                5. *-rgt-identityN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \left(y \cdot \log z + \color{blue}{y \cdot 1}\right) \]
                6. distribute-lft-inN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \color{blue}{y \cdot \left(\log z + 1\right)} \]
                7. +-commutativeN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + y \cdot \color{blue}{\left(1 + \log z\right)} \]
                8. associate-+l+N/A

                  \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(-1 \cdot \left(y \cdot z\right) + y \cdot \left(1 + \log z\right)\right)} \]
                9. +-commutativeN/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{\left(y \cdot \left(1 + \log z\right) + -1 \cdot \left(y \cdot z\right)\right)} \]
                10. mul-1-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{\left(\mathsf{neg}\left(y \cdot z\right)\right)}\right) \]
                11. distribute-rgt-neg-inN/A

                  \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{y \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
                12. distribute-lft-inN/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{y \cdot \left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)} \]
                13. sub-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + y \cdot \color{blue}{\left(\left(1 + \log z\right) - z\right)} \]
                14. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(\left(1 + \log z\right) - z\right)\right)} \]
                15. sub-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)}\right) \]
                16. associate-+r+N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)}\right) \]
                17. mul-1-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right)\right) \]
                18. +-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)}\right) \]
              7. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)} \]
              8. Taylor expanded in z around inf

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, -1 \cdot \left(y \cdot z\right)\right) \]
              9. Step-by-step derivation
                1. Applied rewrites87.0%

                  \[\leadsto \mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right) \]
              10. Recombined 2 regimes into one program.
              11. Add Preprocessing

              Alternative 6: 99.9% accurate, 1.0× speedup?

              \[\begin{array}{l} \\ \mathsf{fma}\left(\left(1 + \log z\right) - z, y, x \cdot 0.5\right) \end{array} \]
              (FPCore (x y z) :precision binary64 (fma (- (+ 1.0 (log z)) z) y (* x 0.5)))
              double code(double x, double y, double z) {
              	return fma(((1.0 + log(z)) - z), y, (x * 0.5));
              }
              
              function code(x, y, z)
              	return fma(Float64(Float64(1.0 + log(z)) - z), y, Float64(x * 0.5))
              end
              
              code[x_, y_, z_] := N[(N[(N[(1.0 + N[Log[z], $MachinePrecision]), $MachinePrecision] - z), $MachinePrecision] * y + N[(x * 0.5), $MachinePrecision]), $MachinePrecision]
              
              \begin{array}{l}
              
              \\
              \mathsf{fma}\left(\left(1 + \log z\right) - z, y, x \cdot 0.5\right)
              \end{array}
              
              Derivation
              1. Initial program 99.9%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Step-by-step derivation
                1. lift-+.f64N/A

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

                  \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
                3. lift-*.f64N/A

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

                  \[\leadsto \color{blue}{\left(\left(1 - z\right) + \log z\right) \cdot y} + x \cdot \frac{1}{2} \]
                5. lower-fma.f6499.9

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\left(1 - z\right) + \log z, y, x \cdot 0.5\right)} \]
                6. lift-+.f64N/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\left(1 - z\right) + \log z}, y, x \cdot \frac{1}{2}\right) \]
                7. +-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\log z + \left(1 - z\right)}, y, x \cdot \frac{1}{2}\right) \]
                8. lift--.f64N/A

                  \[\leadsto \mathsf{fma}\left(\log z + \color{blue}{\left(1 - z\right)}, y, x \cdot \frac{1}{2}\right) \]
                9. associate-+r-N/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\left(\log z + 1\right) - z}, y, x \cdot \frac{1}{2}\right) \]
                10. lower--.f64N/A

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\left(\log z + 1\right) - z}, y, x \cdot \frac{1}{2}\right) \]
                11. lower-+.f6499.9

                  \[\leadsto \mathsf{fma}\left(\color{blue}{\left(\log z + 1\right)} - z, y, x \cdot 0.5\right) \]
                12. lift-*.f64N/A

                  \[\leadsto \mathsf{fma}\left(\left(\log z + 1\right) - z, y, \color{blue}{x \cdot \frac{1}{2}}\right) \]
                13. *-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\left(\log z + 1\right) - z, y, \color{blue}{\frac{1}{2} \cdot x}\right) \]
                14. lower-*.f6499.9

                  \[\leadsto \mathsf{fma}\left(\left(\log z + 1\right) - z, y, \color{blue}{0.5 \cdot x}\right) \]
              4. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\log z + 1\right) - z, y, 0.5 \cdot x\right)} \]
              5. Final simplification99.9%

                \[\leadsto \mathsf{fma}\left(\left(1 + \log z\right) - z, y, x \cdot 0.5\right) \]
              6. Add Preprocessing

              Alternative 7: 99.9% accurate, 1.0× speedup?

              \[\begin{array}{l} \\ \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right) \end{array} \]
              (FPCore (x y z) :precision binary64 (fma 0.5 x (fma (- (log z) z) y y)))
              double code(double x, double y, double z) {
              	return fma(0.5, x, fma((log(z) - z), y, y));
              }
              
              function code(x, y, z)
              	return fma(0.5, x, fma(Float64(log(z) - z), y, y))
              end
              
              code[x_, y_, z_] := N[(0.5 * x + N[(N[(N[Log[z], $MachinePrecision] - z), $MachinePrecision] * y + y), $MachinePrecision]), $MachinePrecision]
              
              \begin{array}{l}
              
              \\
              \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)
              \end{array}
              
              Derivation
              1. Initial program 99.9%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Taylor expanded in z around 0

                \[\leadsto \color{blue}{-1 \cdot \left(y \cdot z\right) + \left(\frac{1}{2} \cdot x + y \cdot \left(1 + \log z\right)\right)} \]
              4. Step-by-step derivation
                1. +-commutativeN/A

                  \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot x + y \cdot \left(1 + \log z\right)\right) + -1 \cdot \left(y \cdot z\right)} \]
                2. associate-+l+N/A

                  \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + -1 \cdot \left(y \cdot z\right)\right)} \]
                3. mul-1-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{\left(\mathsf{neg}\left(y \cdot z\right)\right)}\right) \]
                4. unsub-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{\left(y \cdot \left(1 + \log z\right) - y \cdot z\right)} \]
                5. distribute-lft-out--N/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{y \cdot \left(\left(1 + \log z\right) - z\right)} \]
                6. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(\left(1 + \log z\right) - z\right)\right)} \]
                7. sub-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)}\right) \]
                8. associate-+r+N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)}\right) \]
                9. mul-1-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right)\right) \]
                10. +-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)}\right) \]
                11. distribute-rgt-inN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\left(\log z + -1 \cdot z\right) \cdot y + 1 \cdot y}\right) \]
                12. *-lft-identityN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \left(\log z + -1 \cdot z\right) \cdot y + \color{blue}{y}\right) \]
                13. lower-fma.f64N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \color{blue}{\mathsf{fma}\left(\log z + -1 \cdot z, y, y\right)}\right) \]
                14. mul-1-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \mathsf{fma}\left(\log z + \color{blue}{\left(\mathsf{neg}\left(z\right)\right)}, y, y\right)\right) \]
                15. sub-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \mathsf{fma}\left(\color{blue}{\log z - z}, y, y\right)\right) \]
                16. lower--.f64N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, \mathsf{fma}\left(\color{blue}{\log z - z}, y, y\right)\right) \]
                17. lower-log.f6499.9

                  \[\leadsto \mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\color{blue}{\log z} - z, y, y\right)\right) \]
              5. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)} \]
              6. Add Preprocessing

              Alternative 8: 75.0% accurate, 8.6× speedup?

              \[\begin{array}{l} \\ \mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right) \end{array} \]
              (FPCore (x y z) :precision binary64 (fma 0.5 x (* (- z) y)))
              double code(double x, double y, double z) {
              	return fma(0.5, x, (-z * y));
              }
              
              function code(x, y, z)
              	return fma(0.5, x, Float64(Float64(-z) * y))
              end
              
              code[x_, y_, z_] := N[(0.5 * x + N[((-z) * y), $MachinePrecision]), $MachinePrecision]
              
              \begin{array}{l}
              
              \\
              \mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right)
              \end{array}
              
              Derivation
              1. Initial program 99.9%

                \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
              2. Add Preprocessing
              3. Step-by-step derivation
                1. lift-+.f64N/A

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

                  \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right) + x \cdot \frac{1}{2}} \]
                3. lift-*.f64N/A

                  \[\leadsto \color{blue}{y \cdot \left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
                4. lift-+.f64N/A

                  \[\leadsto y \cdot \color{blue}{\left(\left(1 - z\right) + \log z\right)} + x \cdot \frac{1}{2} \]
                5. +-commutativeN/A

                  \[\leadsto y \cdot \color{blue}{\left(\log z + \left(1 - z\right)\right)} + x \cdot \frac{1}{2} \]
                6. distribute-rgt-inN/A

                  \[\leadsto \color{blue}{\left(\log z \cdot y + \left(1 - z\right) \cdot y\right)} + x \cdot \frac{1}{2} \]
                7. associate-+l+N/A

                  \[\leadsto \color{blue}{\log z \cdot y + \left(\left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
                8. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \left(1 - z\right) \cdot y + x \cdot \frac{1}{2}\right)} \]
                9. lower-fma.f6499.9

                  \[\leadsto \mathsf{fma}\left(\log z, y, \color{blue}{\mathsf{fma}\left(1 - z, y, x \cdot 0.5\right)}\right) \]
                10. lift-*.f64N/A

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{x \cdot \frac{1}{2}}\right)\right) \]
                11. *-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{\frac{1}{2} \cdot x}\right)\right) \]
                12. lower-*.f6499.9

                  \[\leadsto \mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, \color{blue}{0.5 \cdot x}\right)\right) \]
              4. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(1 - z, y, 0.5 \cdot x\right)\right)} \]
              5. Taylor expanded in z around 0

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

                  \[\leadsto \color{blue}{\left(-1 \cdot \left(y \cdot z\right) + \left(\frac{1}{2} \cdot x + y \cdot \log z\right)\right) + y} \]
                2. associate-+r+N/A

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

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

                  \[\leadsto \color{blue}{\left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right)} + \left(y \cdot \log z + y\right) \]
                5. *-rgt-identityN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \left(y \cdot \log z + \color{blue}{y \cdot 1}\right) \]
                6. distribute-lft-inN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + \color{blue}{y \cdot \left(\log z + 1\right)} \]
                7. +-commutativeN/A

                  \[\leadsto \left(\frac{1}{2} \cdot x + -1 \cdot \left(y \cdot z\right)\right) + y \cdot \color{blue}{\left(1 + \log z\right)} \]
                8. associate-+l+N/A

                  \[\leadsto \color{blue}{\frac{1}{2} \cdot x + \left(-1 \cdot \left(y \cdot z\right) + y \cdot \left(1 + \log z\right)\right)} \]
                9. +-commutativeN/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{\left(y \cdot \left(1 + \log z\right) + -1 \cdot \left(y \cdot z\right)\right)} \]
                10. mul-1-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{\left(\mathsf{neg}\left(y \cdot z\right)\right)}\right) \]
                11. distribute-rgt-neg-inN/A

                  \[\leadsto \frac{1}{2} \cdot x + \left(y \cdot \left(1 + \log z\right) + \color{blue}{y \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
                12. distribute-lft-inN/A

                  \[\leadsto \frac{1}{2} \cdot x + \color{blue}{y \cdot \left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)} \]
                13. sub-negN/A

                  \[\leadsto \frac{1}{2} \cdot x + y \cdot \color{blue}{\left(\left(1 + \log z\right) - z\right)} \]
                14. lower-fma.f64N/A

                  \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(\left(1 + \log z\right) - z\right)\right)} \]
                15. sub-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(1 + \log z\right) + \left(\mathsf{neg}\left(z\right)\right)\right)}\right) \]
                16. associate-+r+N/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(1 + \left(\log z + \left(\mathsf{neg}\left(z\right)\right)\right)\right)}\right) \]
                17. mul-1-negN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \left(1 + \left(\log z + \color{blue}{-1 \cdot z}\right)\right)\right) \]
                18. +-commutativeN/A

                  \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, y \cdot \color{blue}{\left(\left(\log z + -1 \cdot z\right) + 1\right)}\right) \]
              7. Applied rewrites99.9%

                \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, x, \mathsf{fma}\left(\log z - z, y, y\right)\right)} \]
              8. Taylor expanded in z around inf

                \[\leadsto \mathsf{fma}\left(\frac{1}{2}, x, -1 \cdot \left(y \cdot z\right)\right) \]
              9. Step-by-step derivation
                1. Applied rewrites73.5%

                  \[\leadsto \mathsf{fma}\left(0.5, x, \left(-z\right) \cdot y\right) \]
                2. Add Preprocessing

                Alternative 9: 40.7% accurate, 20.0× speedup?

                \[\begin{array}{l} \\ x \cdot 0.5 \end{array} \]
                (FPCore (x y z) :precision binary64 (* x 0.5))
                double code(double x, double y, double z) {
                	return x * 0.5;
                }
                
                real(8) function code(x, y, z)
                    real(8), intent (in) :: x
                    real(8), intent (in) :: y
                    real(8), intent (in) :: z
                    code = x * 0.5d0
                end function
                
                public static double code(double x, double y, double z) {
                	return x * 0.5;
                }
                
                def code(x, y, z):
                	return x * 0.5
                
                function code(x, y, z)
                	return Float64(x * 0.5)
                end
                
                function tmp = code(x, y, z)
                	tmp = x * 0.5;
                end
                
                code[x_, y_, z_] := N[(x * 0.5), $MachinePrecision]
                
                \begin{array}{l}
                
                \\
                x \cdot 0.5
                \end{array}
                
                Derivation
                1. Initial program 99.9%

                  \[x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right) \]
                2. Add Preprocessing
                3. Taylor expanded in y around 0

                  \[\leadsto \color{blue}{\frac{1}{2} \cdot x} \]
                4. Step-by-step derivation
                  1. lower-*.f6437.0

                    \[\leadsto \color{blue}{0.5 \cdot x} \]
                5. Applied rewrites37.0%

                  \[\leadsto \color{blue}{0.5 \cdot x} \]
                6. Final simplification37.0%

                  \[\leadsto x \cdot 0.5 \]
                7. Add Preprocessing

                Developer Target 1: 99.8% accurate, 1.0× speedup?

                \[\begin{array}{l} \\ \left(y + 0.5 \cdot x\right) - y \cdot \left(z - \log z\right) \end{array} \]
                (FPCore (x y z) :precision binary64 (- (+ y (* 0.5 x)) (* y (- z (log z)))))
                double code(double x, double y, double z) {
                	return (y + (0.5 * x)) - (y * (z - log(z)));
                }
                
                real(8) function code(x, y, z)
                    real(8), intent (in) :: x
                    real(8), intent (in) :: y
                    real(8), intent (in) :: z
                    code = (y + (0.5d0 * x)) - (y * (z - log(z)))
                end function
                
                public static double code(double x, double y, double z) {
                	return (y + (0.5 * x)) - (y * (z - Math.log(z)));
                }
                
                def code(x, y, z):
                	return (y + (0.5 * x)) - (y * (z - math.log(z)))
                
                function code(x, y, z)
                	return Float64(Float64(y + Float64(0.5 * x)) - Float64(y * Float64(z - log(z))))
                end
                
                function tmp = code(x, y, z)
                	tmp = (y + (0.5 * x)) - (y * (z - log(z)));
                end
                
                code[x_, y_, z_] := N[(N[(y + N[(0.5 * x), $MachinePrecision]), $MachinePrecision] - N[(y * N[(z - N[Log[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
                
                \begin{array}{l}
                
                \\
                \left(y + 0.5 \cdot x\right) - y \cdot \left(z - \log z\right)
                \end{array}
                

                Reproduce

                ?
                herbie shell --seed 2024276 
                (FPCore (x y z)
                  :name "System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2"
                  :precision binary64
                
                  :alt
                  (! :herbie-platform default (- (+ y (* 1/2 x)) (* y (- z (log z)))))
                
                  (+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))