Logarithmic Transform

Percentage Accurate: 41.3% → 98.7%
Time: 26.6s
Alternatives: 11
Speedup: 19.8×

Specification

?
\[\begin{array}{l} \\ c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \end{array} \]
(FPCore (c x y)
 :precision binary64
 (* c (log (+ 1.0 (* (- (pow (E) x) 1.0) y)))))
\begin{array}{l}

\\
c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\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 11 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 41.3% accurate, 1.0× speedup?

\[\begin{array}{l} \\ c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \end{array} \]
(FPCore (c x y)
 :precision binary64
 (* c (log (+ 1.0 (* (- (pow (E) x) 1.0) y)))))
\begin{array}{l}

\\
c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)
\end{array}

Alternative 1: 98.7% accurate, 0.6× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq -0.00146 \lor \neg \left(y \leq 6 \cdot 10^{-119}\right):\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(-0.5 \cdot c, {\left(\mathsf{expm1}\left(x\right)\right)}^{2} \cdot y, \mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \end{array} \end{array} \]
(FPCore (c x y)
 :precision binary64
 (if (or (<= y -0.00146) (not (<= y 6e-119)))
   (* (log1p (* (expm1 x) y)) c)
   (* (fma (* -0.5 c) (* (pow (expm1 x) 2.0) y) (* (expm1 x) c)) y)))
double code(double c, double x, double y) {
	double tmp;
	if ((y <= -0.00146) || !(y <= 6e-119)) {
		tmp = log1p((expm1(x) * y)) * c;
	} else {
		tmp = fma((-0.5 * c), (pow(expm1(x), 2.0) * y), (expm1(x) * c)) * y;
	}
	return tmp;
}
function code(c, x, y)
	tmp = 0.0
	if ((y <= -0.00146) || !(y <= 6e-119))
		tmp = Float64(log1p(Float64(expm1(x) * y)) * c);
	else
		tmp = Float64(fma(Float64(-0.5 * c), Float64((expm1(x) ^ 2.0) * y), Float64(expm1(x) * c)) * y);
	end
	return tmp
end
code[c_, x_, y_] := If[Or[LessEqual[y, -0.00146], N[Not[LessEqual[y, 6e-119]], $MachinePrecision]], N[(N[Log[1 + N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision], N[(N[(N[(-0.5 * c), $MachinePrecision] * N[(N[Power[N[(Exp[x] - 1), $MachinePrecision], 2.0], $MachinePrecision] * y), $MachinePrecision] + N[(N[(Exp[x] - 1), $MachinePrecision] * c), $MachinePrecision]), $MachinePrecision] * y), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;y \leq -0.00146 \lor \neg \left(y \leq 6 \cdot 10^{-119}\right):\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.5 \cdot c, {\left(\mathsf{expm1}\left(x\right)\right)}^{2} \cdot y, \mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -0.0014599999999999999 or 6.0000000000000004e-119 < y

    1. Initial program 37.0%

      \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
      2. lift-log.f64N/A

        \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
      3. lift-+.f64N/A

        \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
      4. lift-*.f64N/A

        \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
      5. lift--.f64N/A

        \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
      6. lift-E.f64N/A

        \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
      7. lift-pow.f64N/A

        \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
      8. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      9. lower-*.f64N/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
    4. Applied rewrites98.1%

      \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
    5. Taylor expanded in x around 0

      \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{x}\right) \cdot y\right) \cdot c \]
    6. Step-by-step derivation
      1. Applied rewrites98.1%

        \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{x}\right) \cdot y\right) \cdot c \]

      if -0.0014599999999999999 < y < 6.0000000000000004e-119

      1. Initial program 47.6%

        \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
      2. Add Preprocessing
      3. Taylor expanded in y around 0

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

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

          \[\leadsto \left(\frac{-1}{2} \cdot \left(c \cdot \left(y \cdot {\left({\mathsf{E}\left(\right)}^{x} - 1\right)}^{2}\right)\right) + c \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)\right) \cdot \color{blue}{y} \]
      5. Applied rewrites99.8%

        \[\leadsto \color{blue}{\mathsf{fma}\left(-0.5 \cdot c, {\left(\mathsf{expm1}\left(x \cdot 1\right)\right)}^{2} \cdot y, \mathsf{expm1}\left(x \cdot 1\right) \cdot c\right) \cdot y} \]
    7. Recombined 2 regimes into one program.
    8. Final simplification98.9%

      \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -0.00146 \lor \neg \left(y \leq 6 \cdot 10^{-119}\right):\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(-0.5 \cdot c, {\left(\mathsf{expm1}\left(x\right)\right)}^{2} \cdot y, \mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \end{array} \]
    9. Add Preprocessing

    Alternative 2: 93.3% accurate, 1.0× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq -2.2 \cdot 10^{-202} \lor \neg \left(y \leq 3.2 \cdot 10^{-274}\right):\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \end{array} \end{array} \]
    (FPCore (c x y)
     :precision binary64
     (if (or (<= y -2.2e-202) (not (<= y 3.2e-274)))
       (* (log1p (* (expm1 x) y)) c)
       (* (* c y) x)))
    double code(double c, double x, double y) {
    	double tmp;
    	if ((y <= -2.2e-202) || !(y <= 3.2e-274)) {
    		tmp = log1p((expm1(x) * y)) * c;
    	} else {
    		tmp = (c * y) * x;
    	}
    	return tmp;
    }
    
    public static double code(double c, double x, double y) {
    	double tmp;
    	if ((y <= -2.2e-202) || !(y <= 3.2e-274)) {
    		tmp = Math.log1p((Math.expm1(x) * y)) * c;
    	} else {
    		tmp = (c * y) * x;
    	}
    	return tmp;
    }
    
    def code(c, x, y):
    	tmp = 0
    	if (y <= -2.2e-202) or not (y <= 3.2e-274):
    		tmp = math.log1p((math.expm1(x) * y)) * c
    	else:
    		tmp = (c * y) * x
    	return tmp
    
    function code(c, x, y)
    	tmp = 0.0
    	if ((y <= -2.2e-202) || !(y <= 3.2e-274))
    		tmp = Float64(log1p(Float64(expm1(x) * y)) * c);
    	else
    		tmp = Float64(Float64(c * y) * x);
    	end
    	return tmp
    end
    
    code[c_, x_, y_] := If[Or[LessEqual[y, -2.2e-202], N[Not[LessEqual[y, 3.2e-274]], $MachinePrecision]], N[(N[Log[1 + N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision], N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision]]
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    \mathbf{if}\;y \leq -2.2 \cdot 10^{-202} \lor \neg \left(y \leq 3.2 \cdot 10^{-274}\right):\\
    \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
    
    \mathbf{else}:\\
    \;\;\;\;\left(c \cdot y\right) \cdot x\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if y < -2.20000000000000008e-202 or 3.19999999999999979e-274 < y

      1. Initial program 38.4%

        \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-*.f64N/A

          \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        2. lift-log.f64N/A

          \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        3. lift-+.f64N/A

          \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        4. lift-*.f64N/A

          \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
        5. lift--.f64N/A

          \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
        6. lift-E.f64N/A

          \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
        7. lift-pow.f64N/A

          \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
        8. *-commutativeN/A

          \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        9. lower-*.f64N/A

          \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      4. Applied rewrites95.7%

        \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
      5. Taylor expanded in x around 0

        \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{x}\right) \cdot y\right) \cdot c \]
      6. Step-by-step derivation
        1. Applied rewrites95.7%

          \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{x}\right) \cdot y\right) \cdot c \]

        if -2.20000000000000008e-202 < y < 3.19999999999999979e-274

        1. Initial program 65.9%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites74.4%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

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

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

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          3. lift-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          4. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          5. lower-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          6. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          7. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          9. log-EN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          10. pow-to-expN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          11. *-commutativeN/A

            \[\leadsto \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \cdot \color{blue}{x} \]
        7. Applied rewrites89.0%

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

          \[\leadsto \left(c \cdot y\right) \cdot x \]
        9. Step-by-step derivation
          1. lift-*.f6497.2

            \[\leadsto \left(c \cdot y\right) \cdot x \]
        10. Applied rewrites97.2%

          \[\leadsto \left(c \cdot y\right) \cdot x \]
      7. Recombined 2 regimes into one program.
      8. Final simplification95.9%

        \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -2.2 \cdot 10^{-202} \lor \neg \left(y \leq 3.2 \cdot 10^{-274}\right):\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \end{array} \]
      9. Add Preprocessing

      Alternative 3: 84.0% accurate, 1.5× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;x \leq -0.028:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, y \cdot x, 0.16666666666666666 \cdot y\right), x, 0.5 \cdot y\right), x, y\right) \cdot x\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= x -0.028)
         (* (* (expm1 x) y) c)
         (*
          (log1p
           (*
            (fma
             (fma
              (fma 0.041666666666666664 (* y x) (* 0.16666666666666666 y))
              x
              (* 0.5 y))
             x
             y)
            x))
          c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.028) {
      		tmp = (expm1(x) * y) * c;
      	} else {
      		tmp = log1p((fma(fma(fma(0.041666666666666664, (y * x), (0.16666666666666666 * y)), x, (0.5 * y)), x, y) * x)) * c;
      	}
      	return tmp;
      }
      
      function code(c, x, y)
      	tmp = 0.0
      	if (x <= -0.028)
      		tmp = Float64(Float64(expm1(x) * y) * c);
      	else
      		tmp = Float64(log1p(Float64(fma(fma(fma(0.041666666666666664, Float64(y * x), Float64(0.16666666666666666 * y)), x, Float64(0.5 * y)), x, y) * x)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := If[LessEqual[x, -0.028], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision], N[(N[Log[1 + N[(N[(N[(N[(0.041666666666666664 * N[(y * x), $MachinePrecision] + N[(0.16666666666666666 * y), $MachinePrecision]), $MachinePrecision] * x + N[(0.5 * y), $MachinePrecision]), $MachinePrecision] * x + y), $MachinePrecision] * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;x \leq -0.028:\\
      \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      
      \mathbf{else}:\\
      \;\;\;\;\mathsf{log1p}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, y \cdot x, 0.16666666666666666 \cdot y\right), x, 0.5 \cdot y\right), x, y\right) \cdot x\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < -0.0280000000000000006

        1. Initial program 57.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites99.8%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6467.2

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity67.2

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites67.2%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -0.0280000000000000006 < x

        1. Initial program 37.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites90.6%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

          \[\leadsto \mathsf{log1p}\left(\color{blue}{x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)}\right) \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot \left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right)\right) \cdot c \]
          8. *-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(\left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right) \cdot \color{blue}{x}\right) \cdot c \]
          9. lower-*.f64N/A

            \[\leadsto \mathsf{log1p}\left(\left(y + x \cdot \left(\frac{1}{2} \cdot y + x \cdot \left(\frac{1}{24} \cdot \left(x \cdot y\right) + \frac{1}{6} \cdot y\right)\right)\right) \cdot \color{blue}{x}\right) \cdot c \]
        7. Applied rewrites90.0%

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, y \cdot x, 0.16666666666666666 \cdot y\right), x, 0.5 \cdot y\right), x, y\right) \cdot x}\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 4: 84.0% accurate, 1.6× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;x \leq -0.028:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, x, 0.16666666666666666\right), x, 0.5\right), x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= x -0.028)
         (* (* (expm1 x) y) c)
         (*
          (log1p
           (*
            (*
             (fma (fma (fma 0.041666666666666664 x 0.16666666666666666) x 0.5) x 1.0)
             x)
            y))
          c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.028) {
      		tmp = (expm1(x) * y) * c;
      	} else {
      		tmp = log1p(((fma(fma(fma(0.041666666666666664, x, 0.16666666666666666), x, 0.5), x, 1.0) * x) * y)) * c;
      	}
      	return tmp;
      }
      
      function code(c, x, y)
      	tmp = 0.0
      	if (x <= -0.028)
      		tmp = Float64(Float64(expm1(x) * y) * c);
      	else
      		tmp = Float64(log1p(Float64(Float64(fma(fma(fma(0.041666666666666664, x, 0.16666666666666666), x, 0.5), x, 1.0) * x) * y)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := If[LessEqual[x, -0.028], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision], N[(N[Log[1 + N[(N[(N[(N[(N[(0.041666666666666664 * x + 0.16666666666666666), $MachinePrecision] * x + 0.5), $MachinePrecision] * x + 1.0), $MachinePrecision] * x), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;x \leq -0.028:\\
      \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      
      \mathbf{else}:\\
      \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, x, 0.16666666666666666\right), x, 0.5\right), x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < -0.0280000000000000006

        1. Initial program 57.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites99.8%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6467.2

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity67.2

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites67.2%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -0.0280000000000000006 < x

        1. Initial program 37.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites90.6%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + x \cdot \left(\frac{1}{6} + \frac{1}{24} \cdot x\right)\right)\right)\right)} \cdot y\right) \cdot c \]
        6. Applied rewrites90.0%

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.041666666666666664, x, 0.16666666666666666\right), x, 0.5\right), x, 1\right) \cdot x\right)} \cdot y\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 5: 83.9% accurate, 1.6× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;x \leq -0.028:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(\mathsf{fma}\left(0.16666666666666666, x, 0.5\right), x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= x -0.028)
         (* (* (expm1 x) y) c)
         (* (log1p (* (* (fma (fma 0.16666666666666666 x 0.5) x 1.0) x) y)) c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.028) {
      		tmp = (expm1(x) * y) * c;
      	} else {
      		tmp = log1p(((fma(fma(0.16666666666666666, x, 0.5), x, 1.0) * x) * y)) * c;
      	}
      	return tmp;
      }
      
      function code(c, x, y)
      	tmp = 0.0
      	if (x <= -0.028)
      		tmp = Float64(Float64(expm1(x) * y) * c);
      	else
      		tmp = Float64(log1p(Float64(Float64(fma(fma(0.16666666666666666, x, 0.5), x, 1.0) * x) * y)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := If[LessEqual[x, -0.028], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision], N[(N[Log[1 + N[(N[(N[(N[(0.16666666666666666 * x + 0.5), $MachinePrecision] * x + 1.0), $MachinePrecision] * x), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;x \leq -0.028:\\
      \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      
      \mathbf{else}:\\
      \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(\mathsf{fma}\left(0.16666666666666666, x, 0.5\right), x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < -0.0280000000000000006

        1. Initial program 57.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites99.8%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6467.2

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity67.2

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites67.2%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -0.0280000000000000006 < x

        1. Initial program 37.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites90.6%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right)} \cdot y\right) \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(\left(\color{blue}{x} \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(\left(\color{blue}{x} \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right)\right) \cdot y\right) \cdot c \]
          8. *-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right)\right) \cdot \color{blue}{x}\right) \cdot y\right) \cdot c \]
          9. metadata-evalN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot 1 + \frac{1}{6} \cdot x\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          10. metadata-evalN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot {1}^{2} + \frac{1}{6} \cdot x\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          11. log-EN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2} + \frac{1}{6} \cdot x\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          12. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2} + \frac{1}{6} \cdot \left(x \cdot 1\right)\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          13. metadata-evalN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2} + \frac{1}{6} \cdot \left(x \cdot {1}^{3}\right)\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          14. log-EN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2} + \frac{1}{6} \cdot \left(x \cdot {\log \mathsf{E}\left(\right)}^{3}\right)\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          15. +-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(1 + x \cdot \left(\frac{1}{6} \cdot \left(x \cdot {\log \mathsf{E}\left(\right)}^{3}\right) + \frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2}\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
          16. log-EN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(\log \mathsf{E}\left(\right) + x \cdot \left(\frac{1}{6} \cdot \left(x \cdot {\log \mathsf{E}\left(\right)}^{3}\right) + \frac{1}{2} \cdot {\log \mathsf{E}\left(\right)}^{2}\right)\right) \cdot x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites89.7%

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(\mathsf{fma}\left(\mathsf{fma}\left(0.16666666666666666, x, 0.5\right), x, 1\right) \cdot x\right)} \cdot y\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 6: 74.6% accurate, 1.7× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} t_0 := \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{if}\;y \leq -2.2 \cdot 10^{-202}:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;y \leq 3.2 \cdot 10^{-274}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \mathbf{elif}\;y \leq 5.9 \cdot 10^{+156}:\\ \;\;\;\;t\_0\\ \mathbf{else}:\\ \;\;\;\;\log \left(y \cdot x\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (let* ((t_0 (* (* (expm1 x) y) c)))
         (if (<= y -2.2e-202)
           t_0
           (if (<= y 3.2e-274)
             (* (* c y) x)
             (if (<= y 5.9e+156) t_0 (* (log (* y x)) c))))))
      double code(double c, double x, double y) {
      	double t_0 = (expm1(x) * y) * c;
      	double tmp;
      	if (y <= -2.2e-202) {
      		tmp = t_0;
      	} else if (y <= 3.2e-274) {
      		tmp = (c * y) * x;
      	} else if (y <= 5.9e+156) {
      		tmp = t_0;
      	} else {
      		tmp = log((y * x)) * c;
      	}
      	return tmp;
      }
      
      public static double code(double c, double x, double y) {
      	double t_0 = (Math.expm1(x) * y) * c;
      	double tmp;
      	if (y <= -2.2e-202) {
      		tmp = t_0;
      	} else if (y <= 3.2e-274) {
      		tmp = (c * y) * x;
      	} else if (y <= 5.9e+156) {
      		tmp = t_0;
      	} else {
      		tmp = Math.log((y * x)) * c;
      	}
      	return tmp;
      }
      
      def code(c, x, y):
      	t_0 = (math.expm1(x) * y) * c
      	tmp = 0
      	if y <= -2.2e-202:
      		tmp = t_0
      	elif y <= 3.2e-274:
      		tmp = (c * y) * x
      	elif y <= 5.9e+156:
      		tmp = t_0
      	else:
      		tmp = math.log((y * x)) * c
      	return tmp
      
      function code(c, x, y)
      	t_0 = Float64(Float64(expm1(x) * y) * c)
      	tmp = 0.0
      	if (y <= -2.2e-202)
      		tmp = t_0;
      	elseif (y <= 3.2e-274)
      		tmp = Float64(Float64(c * y) * x);
      	elseif (y <= 5.9e+156)
      		tmp = t_0;
      	else
      		tmp = Float64(log(Float64(y * x)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := Block[{t$95$0 = N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision]}, If[LessEqual[y, -2.2e-202], t$95$0, If[LessEqual[y, 3.2e-274], N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision], If[LessEqual[y, 5.9e+156], t$95$0, N[(N[Log[N[(y * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]]]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      t_0 := \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      \mathbf{if}\;y \leq -2.2 \cdot 10^{-202}:\\
      \;\;\;\;t\_0\\
      
      \mathbf{elif}\;y \leq 3.2 \cdot 10^{-274}:\\
      \;\;\;\;\left(c \cdot y\right) \cdot x\\
      
      \mathbf{elif}\;y \leq 5.9 \cdot 10^{+156}:\\
      \;\;\;\;t\_0\\
      
      \mathbf{else}:\\
      \;\;\;\;\log \left(y \cdot x\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 3 regimes
      2. if y < -2.20000000000000008e-202 or 3.19999999999999979e-274 < y < 5.8999999999999997e156

        1. Initial program 42.0%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites95.3%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6480.5

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity80.5

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites80.5%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -2.20000000000000008e-202 < y < 3.19999999999999979e-274

        1. Initial program 65.9%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites74.4%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

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

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

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          3. lift-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          4. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          5. lower-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          6. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          7. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          9. log-EN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          10. pow-to-expN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          11. *-commutativeN/A

            \[\leadsto \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \cdot \color{blue}{x} \]
        7. Applied rewrites89.0%

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

          \[\leadsto \left(c \cdot y\right) \cdot x \]
        9. Step-by-step derivation
          1. lift-*.f6497.2

            \[\leadsto \left(c \cdot y\right) \cdot x \]
        10. Applied rewrites97.2%

          \[\leadsto \left(c \cdot y\right) \cdot x \]

        if 5.8999999999999997e156 < y

        1. Initial program 2.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Taylor expanded in y around inf

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

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

            \[\leadsto \mathsf{fma}\left(\log \left({\mathsf{E}\left(\right)}^{x} - 1\right) + -1 \cdot \log \left(\frac{1}{y}\right), \color{blue}{c}, \frac{c}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \]
        5. Applied rewrites80.1%

          \[\leadsto \color{blue}{\mathsf{fma}\left(\log \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right), c, \frac{\frac{c}{y}}{\mathsf{expm1}\left(x \cdot 1\right)}\right)} \]
        6. Taylor expanded in x around 0

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

            \[\leadsto \frac{x \cdot \left(c \cdot \left(\log x + \log y\right) - \frac{1}{2} \cdot \frac{c}{y}\right) + \frac{c}{y}}{x} \]
        8. Applied rewrites80.0%

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

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

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

            \[\leadsto \left(\log x + -1 \cdot \log \left(\frac{1}{y}\right)\right) \cdot c \]
          3. +-commutativeN/A

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

            \[\leadsto \left(\log \left(\frac{1}{y}\right) \cdot -1 + \log x\right) \cdot c \]
          5. lower-fma.f64N/A

            \[\leadsto \mathsf{fma}\left(\log \left(\frac{1}{y}\right), -1, \log x\right) \cdot c \]
          6. log-recN/A

            \[\leadsto \mathsf{fma}\left(\mathsf{neg}\left(\log y\right), -1, \log x\right) \cdot c \]
          7. lower-neg.f64N/A

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
          8. lower-log.f64N/A

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
          9. lower-log.f6478.4

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
        11. Applied rewrites78.4%

          \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
        12. Taylor expanded in x around 0

          \[\leadsto \left(\log x + \log y\right) \cdot c \]
        13. Step-by-step derivation
          1. sum-logN/A

            \[\leadsto \log \left(x \cdot y\right) \cdot c \]
          2. lower-log.f64N/A

            \[\leadsto \log \left(x \cdot y\right) \cdot c \]
          3. *-commutativeN/A

            \[\leadsto \log \left(y \cdot x\right) \cdot c \]
          4. lower-*.f6478.9

            \[\leadsto \log \left(y \cdot x\right) \cdot c \]
        14. Applied rewrites78.9%

          \[\leadsto \log \left(y \cdot x\right) \cdot c \]
      3. Recombined 3 regimes into one program.
      4. Add Preprocessing

      Alternative 7: 83.8% accurate, 1.7× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;x \leq -0.015:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(0.5, x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= x -0.015)
         (* (* (expm1 x) y) c)
         (* (log1p (* (* (fma 0.5 x 1.0) x) y)) c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.015) {
      		tmp = (expm1(x) * y) * c;
      	} else {
      		tmp = log1p(((fma(0.5, x, 1.0) * x) * y)) * c;
      	}
      	return tmp;
      }
      
      function code(c, x, y)
      	tmp = 0.0
      	if (x <= -0.015)
      		tmp = Float64(Float64(expm1(x) * y) * c);
      	else
      		tmp = Float64(log1p(Float64(Float64(fma(0.5, x, 1.0) * x) * y)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := If[LessEqual[x, -0.015], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision], N[(N[Log[1 + N[(N[(N[(0.5 * x + 1.0), $MachinePrecision] * x), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;x \leq -0.015:\\
      \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      
      \mathbf{else}:\\
      \;\;\;\;\mathsf{log1p}\left(\left(\mathsf{fma}\left(0.5, x, 1\right) \cdot x\right) \cdot y\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < -0.014999999999999999

        1. Initial program 57.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites99.8%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6467.2

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity67.2

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites67.2%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -0.014999999999999999 < x

        1. Initial program 37.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites90.6%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right)} \cdot y\right) \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

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

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(\left(\color{blue}{x} \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \mathsf{log1p}\left(\left(x \cdot \left(1 + \frac{1}{2} \cdot x\right)\right) \cdot y\right) \cdot c \]
          8. *-commutativeN/A

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

            \[\leadsto \mathsf{log1p}\left(\left(\left(\frac{1}{2} \cdot x + 1\right) \cdot x\right) \cdot y\right) \cdot c \]
          10. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(\left(\frac{1}{2} \cdot x\right) \cdot 1 + 1\right) \cdot x\right) \cdot y\right) \cdot c \]
          11. lower-*.f64N/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(\left(\frac{1}{2} \cdot x\right) \cdot 1 + 1\right) \cdot \color{blue}{x}\right) \cdot y\right) \cdot c \]
          12. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(\left(\left(\frac{1}{2} \cdot x + 1\right) \cdot x\right) \cdot y\right) \cdot c \]
          13. lower-fma.f6489.3

            \[\leadsto \mathsf{log1p}\left(\left(\mathsf{fma}\left(0.5, x, 1\right) \cdot x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites89.3%

          \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(\mathsf{fma}\left(0.5, x, 1\right) \cdot x\right)} \cdot y\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 8: 83.4% accurate, 1.9× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;x \leq -0.015:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(x \cdot y\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= x -0.015) (* (* (expm1 x) y) c) (* (log1p (* x y)) c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.015) {
      		tmp = (expm1(x) * y) * c;
      	} else {
      		tmp = log1p((x * y)) * c;
      	}
      	return tmp;
      }
      
      public static double code(double c, double x, double y) {
      	double tmp;
      	if (x <= -0.015) {
      		tmp = (Math.expm1(x) * y) * c;
      	} else {
      		tmp = Math.log1p((x * y)) * c;
      	}
      	return tmp;
      }
      
      def code(c, x, y):
      	tmp = 0
      	if x <= -0.015:
      		tmp = (math.expm1(x) * y) * c
      	else:
      		tmp = math.log1p((x * y)) * c
      	return tmp
      
      function code(c, x, y)
      	tmp = 0.0
      	if (x <= -0.015)
      		tmp = Float64(Float64(expm1(x) * y) * c);
      	else
      		tmp = Float64(log1p(Float64(x * y)) * c);
      	end
      	return tmp
      end
      
      code[c_, x_, y_] := If[LessEqual[x, -0.015], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision] * c), $MachinePrecision], N[(N[Log[1 + N[(x * y), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;x \leq -0.015:\\
      \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c\\
      
      \mathbf{else}:\\
      \;\;\;\;\mathsf{log1p}\left(x \cdot y\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < -0.014999999999999999

        1. Initial program 57.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites99.8%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in y around 0

          \[\leadsto \color{blue}{\left(y \cdot \left(e^{x} - 1\right)\right)} \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          3. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          4. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          5. *-commutativeN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          6. log-EN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          7. pow-to-expN/A

            \[\leadsto \left(y \cdot \left(e^{x} - 1\right)\right) \cdot c \]
          8. lower-expm1.f64N/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c \]
          9. *-rgt-identityN/A

            \[\leadsto \left(y \cdot \mathsf{expm1}\left(x \cdot 1\right)\right) \cdot c \]
          10. lift-expm1.f64N/A

            \[\leadsto \left(y \cdot \left(e^{x \cdot 1} - \color{blue}{1}\right)\right) \cdot c \]
          11. *-commutativeN/A

            \[\leadsto \left(\left(e^{x \cdot 1} - 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          12. lift-expm1.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          13. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          14. lift-*.f6467.2

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot \color{blue}{y}\right) \cdot c \]
          15. lift-*.f64N/A

            \[\leadsto \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c \]
          16. *-rgt-identity67.2

            \[\leadsto \left(\mathsf{expm1}\left(x\right) \cdot y\right) \cdot c \]
        7. Applied rewrites67.2%

          \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot y\right)} \cdot c \]

        if -0.014999999999999999 < x

        1. Initial program 37.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites90.6%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

          \[\leadsto \mathsf{log1p}\left(\color{blue}{x} \cdot y\right) \cdot c \]
        6. Step-by-step derivation
          1. lift-expm1.f64N/A

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          2. *-rgt-identityN/A

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          3. lower-expm1.f6488.5

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          4. *-rgt-identity88.5

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          5. *-commutative88.5

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          6. log-E88.5

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
          7. pow-to-exp88.5

            \[\leadsto \mathsf{log1p}\left(x \cdot y\right) \cdot c \]
        7. Applied rewrites88.5%

          \[\leadsto \mathsf{log1p}\left(\color{blue}{x} \cdot y\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 9: 63.6% accurate, 1.9× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq 4.8 \cdot 10^{+156}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;\log \left(y \cdot x\right) \cdot c\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= y 4.8e+156) (* (* c y) x) (* (log (* y x)) c)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (y <= 4.8e+156) {
      		tmp = (c * y) * x;
      	} else {
      		tmp = log((y * x)) * c;
      	}
      	return tmp;
      }
      
      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(8) function code(c, x, y)
      use fmin_fmax_functions
          real(8), intent (in) :: c
          real(8), intent (in) :: x
          real(8), intent (in) :: y
          real(8) :: tmp
          if (y <= 4.8d+156) then
              tmp = (c * y) * x
          else
              tmp = log((y * x)) * c
          end if
          code = tmp
      end function
      
      public static double code(double c, double x, double y) {
      	double tmp;
      	if (y <= 4.8e+156) {
      		tmp = (c * y) * x;
      	} else {
      		tmp = Math.log((y * x)) * c;
      	}
      	return tmp;
      }
      
      def code(c, x, y):
      	tmp = 0
      	if y <= 4.8e+156:
      		tmp = (c * y) * x
      	else:
      		tmp = math.log((y * x)) * c
      	return tmp
      
      function code(c, x, y)
      	tmp = 0.0
      	if (y <= 4.8e+156)
      		tmp = Float64(Float64(c * y) * x);
      	else
      		tmp = Float64(log(Float64(y * x)) * c);
      	end
      	return tmp
      end
      
      function tmp_2 = code(c, x, y)
      	tmp = 0.0;
      	if (y <= 4.8e+156)
      		tmp = (c * y) * x;
      	else
      		tmp = log((y * x)) * c;
      	end
      	tmp_2 = tmp;
      end
      
      code[c_, x_, y_] := If[LessEqual[y, 4.8e+156], N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision], N[(N[Log[N[(y * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;y \leq 4.8 \cdot 10^{+156}:\\
      \;\;\;\;\left(c \cdot y\right) \cdot x\\
      
      \mathbf{else}:\\
      \;\;\;\;\log \left(y \cdot x\right) \cdot c\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if y < 4.8000000000000002e156

        1. Initial program 45.6%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites92.1%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

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

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

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          3. lift-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          4. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          5. lower-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          6. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          7. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          9. log-EN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          10. pow-to-expN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          11. *-commutativeN/A

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

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

          \[\leadsto \left(c \cdot y\right) \cdot x \]
        9. Step-by-step derivation
          1. lift-*.f6472.8

            \[\leadsto \left(c \cdot y\right) \cdot x \]
        10. Applied rewrites72.8%

          \[\leadsto \left(c \cdot y\right) \cdot x \]

        if 4.8000000000000002e156 < y

        1. Initial program 2.8%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Taylor expanded in y around inf

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

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

            \[\leadsto \mathsf{fma}\left(\log \left({\mathsf{E}\left(\right)}^{x} - 1\right) + -1 \cdot \log \left(\frac{1}{y}\right), \color{blue}{c}, \frac{c}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \]
        5. Applied rewrites80.1%

          \[\leadsto \color{blue}{\mathsf{fma}\left(\log \left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right), c, \frac{\frac{c}{y}}{\mathsf{expm1}\left(x \cdot 1\right)}\right)} \]
        6. Taylor expanded in x around 0

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

            \[\leadsto \frac{x \cdot \left(c \cdot \left(\log x + \log y\right) - \frac{1}{2} \cdot \frac{c}{y}\right) + \frac{c}{y}}{x} \]
        8. Applied rewrites80.0%

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

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

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

            \[\leadsto \left(\log x + -1 \cdot \log \left(\frac{1}{y}\right)\right) \cdot c \]
          3. +-commutativeN/A

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

            \[\leadsto \left(\log \left(\frac{1}{y}\right) \cdot -1 + \log x\right) \cdot c \]
          5. lower-fma.f64N/A

            \[\leadsto \mathsf{fma}\left(\log \left(\frac{1}{y}\right), -1, \log x\right) \cdot c \]
          6. log-recN/A

            \[\leadsto \mathsf{fma}\left(\mathsf{neg}\left(\log y\right), -1, \log x\right) \cdot c \]
          7. lower-neg.f64N/A

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
          8. lower-log.f64N/A

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
          9. lower-log.f6478.4

            \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
        11. Applied rewrites78.4%

          \[\leadsto \mathsf{fma}\left(-\log y, -1, \log x\right) \cdot c \]
        12. Taylor expanded in x around 0

          \[\leadsto \left(\log x + \log y\right) \cdot c \]
        13. Step-by-step derivation
          1. sum-logN/A

            \[\leadsto \log \left(x \cdot y\right) \cdot c \]
          2. lower-log.f64N/A

            \[\leadsto \log \left(x \cdot y\right) \cdot c \]
          3. *-commutativeN/A

            \[\leadsto \log \left(y \cdot x\right) \cdot c \]
          4. lower-*.f6478.9

            \[\leadsto \log \left(y \cdot x\right) \cdot c \]
        14. Applied rewrites78.9%

          \[\leadsto \log \left(y \cdot x\right) \cdot c \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 10: 63.0% accurate, 12.8× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;c \leq 2.4 \cdot 10^{+179}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;\left(c \cdot x\right) \cdot y\\ \end{array} \end{array} \]
      (FPCore (c x y)
       :precision binary64
       (if (<= c 2.4e+179) (* (* c y) x) (* (* c x) y)))
      double code(double c, double x, double y) {
      	double tmp;
      	if (c <= 2.4e+179) {
      		tmp = (c * y) * x;
      	} else {
      		tmp = (c * x) * y;
      	}
      	return tmp;
      }
      
      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(8) function code(c, x, y)
      use fmin_fmax_functions
          real(8), intent (in) :: c
          real(8), intent (in) :: x
          real(8), intent (in) :: y
          real(8) :: tmp
          if (c <= 2.4d+179) then
              tmp = (c * y) * x
          else
              tmp = (c * x) * y
          end if
          code = tmp
      end function
      
      public static double code(double c, double x, double y) {
      	double tmp;
      	if (c <= 2.4e+179) {
      		tmp = (c * y) * x;
      	} else {
      		tmp = (c * x) * y;
      	}
      	return tmp;
      }
      
      def code(c, x, y):
      	tmp = 0
      	if c <= 2.4e+179:
      		tmp = (c * y) * x
      	else:
      		tmp = (c * x) * y
      	return tmp
      
      function code(c, x, y)
      	tmp = 0.0
      	if (c <= 2.4e+179)
      		tmp = Float64(Float64(c * y) * x);
      	else
      		tmp = Float64(Float64(c * x) * y);
      	end
      	return tmp
      end
      
      function tmp_2 = code(c, x, y)
      	tmp = 0.0;
      	if (c <= 2.4e+179)
      		tmp = (c * y) * x;
      	else
      		tmp = (c * x) * y;
      	end
      	tmp_2 = tmp;
      end
      
      code[c_, x_, y_] := If[LessEqual[c, 2.4e+179], N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision], N[(N[(c * x), $MachinePrecision] * y), $MachinePrecision]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      \mathbf{if}\;c \leq 2.4 \cdot 10^{+179}:\\
      \;\;\;\;\left(c \cdot y\right) \cdot x\\
      
      \mathbf{else}:\\
      \;\;\;\;\left(c \cdot x\right) \cdot y\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if c < 2.40000000000000013e179

        1. Initial program 46.7%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          2. lift-log.f64N/A

            \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          3. lift-+.f64N/A

            \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
          4. lift-*.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
          5. lift--.f64N/A

            \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
          6. lift-E.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
          7. lift-pow.f64N/A

            \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
          9. lower-*.f64N/A

            \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        4. Applied rewrites93.4%

          \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
        5. Taylor expanded in x around 0

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

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

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          3. lift-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          4. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          5. lower-expm1.f64N/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          6. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          7. *-rgt-identityN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          8. *-commutativeN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          9. log-EN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          10. pow-to-expN/A

            \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
          11. *-commutativeN/A

            \[\leadsto \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \cdot \color{blue}{x} \]
        7. Applied rewrites65.5%

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

          \[\leadsto \left(c \cdot y\right) \cdot x \]
        9. Step-by-step derivation
          1. lift-*.f6471.3

            \[\leadsto \left(c \cdot y\right) \cdot x \]
        10. Applied rewrites71.3%

          \[\leadsto \left(c \cdot y\right) \cdot x \]

        if 2.40000000000000013e179 < c

        1. Initial program 9.2%

          \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
        2. Add Preprocessing
        3. Taylor expanded in x around 0

          \[\leadsto \color{blue}{c \cdot \left(x \cdot \left(y \cdot \log \mathsf{E}\left(\right)\right)\right)} \]
        4. Step-by-step derivation
          1. associate-*r*N/A

            \[\leadsto \left(c \cdot x\right) \cdot \color{blue}{\left(y \cdot \log \mathsf{E}\left(\right)\right)} \]
          2. log-EN/A

            \[\leadsto \left(c \cdot x\right) \cdot \left(y \cdot 1\right) \]
          3. lower-*.f64N/A

            \[\leadsto \left(c \cdot x\right) \cdot \color{blue}{\left(y \cdot 1\right)} \]
          4. lower-*.f64N/A

            \[\leadsto \left(c \cdot x\right) \cdot \left(\color{blue}{y} \cdot 1\right) \]
          5. lower-*.f6459.0

            \[\leadsto \left(c \cdot x\right) \cdot \left(y \cdot \color{blue}{1}\right) \]
        5. Applied rewrites59.0%

          \[\leadsto \color{blue}{\left(c \cdot x\right) \cdot \left(y \cdot 1\right)} \]
        6. Step-by-step derivation
          1. lift-*.f64N/A

            \[\leadsto \left(c \cdot x\right) \cdot \left(y \cdot \color{blue}{1}\right) \]
          2. *-rgt-identity59.0

            \[\leadsto \left(c \cdot x\right) \cdot y \]
        7. Applied rewrites59.0%

          \[\leadsto \left(c \cdot x\right) \cdot \color{blue}{y} \]
      3. Recombined 2 regimes into one program.
      4. Add Preprocessing

      Alternative 11: 61.8% accurate, 19.8× speedup?

      \[\begin{array}{l} \\ \left(c \cdot y\right) \cdot x \end{array} \]
      (FPCore (c x y) :precision binary64 (* (* c y) x))
      double code(double c, double x, double y) {
      	return (c * y) * x;
      }
      
      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(8) function code(c, x, y)
      use fmin_fmax_functions
          real(8), intent (in) :: c
          real(8), intent (in) :: x
          real(8), intent (in) :: y
          code = (c * y) * x
      end function
      
      public static double code(double c, double x, double y) {
      	return (c * y) * x;
      }
      
      def code(c, x, y):
      	return (c * y) * x
      
      function code(c, x, y)
      	return Float64(Float64(c * y) * x)
      end
      
      function tmp = code(c, x, y)
      	tmp = (c * y) * x;
      end
      
      code[c_, x_, y_] := N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \left(c \cdot y\right) \cdot x
      \end{array}
      
      Derivation
      1. Initial program 42.3%

        \[c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-*.f64N/A

          \[\leadsto \color{blue}{c \cdot \log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        2. lift-log.f64N/A

          \[\leadsto c \cdot \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        3. lift-+.f64N/A

          \[\leadsto c \cdot \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \]
        4. lift-*.f64N/A

          \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
        5. lift--.f64N/A

          \[\leadsto c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right)} \cdot y\right) \]
        6. lift-E.f64N/A

          \[\leadsto c \cdot \log \left(1 + \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
        7. lift-pow.f64N/A

          \[\leadsto c \cdot \log \left(1 + \left(\color{blue}{{\mathsf{E}\left(\right)}^{x}} - 1\right) \cdot y\right) \]
        8. *-commutativeN/A

          \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
        9. lower-*.f64N/A

          \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      4. Applied rewrites92.7%

        \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot 1\right) \cdot y\right) \cdot c} \]
      5. Taylor expanded in x around 0

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

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

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        3. lift-expm1.f64N/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        4. *-rgt-identityN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        5. lower-expm1.f64N/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        6. *-commutativeN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        7. *-rgt-identityN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        8. *-commutativeN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        9. log-EN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        10. pow-to-expN/A

          \[\leadsto x \cdot \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \]
        11. *-commutativeN/A

          \[\leadsto \left(\frac{1}{2} \cdot \left(c \cdot \left(x \cdot \left(y + -1 \cdot {y}^{2}\right)\right)\right) + c \cdot y\right) \cdot \color{blue}{x} \]
      7. Applied rewrites62.9%

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

        \[\leadsto \left(c \cdot y\right) \cdot x \]
      9. Step-by-step derivation
        1. lift-*.f6468.4

          \[\leadsto \left(c \cdot y\right) \cdot x \]
      10. Applied rewrites68.4%

        \[\leadsto \left(c \cdot y\right) \cdot x \]
      11. Add Preprocessing

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

      \[\begin{array}{l} \\ c \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right) \end{array} \]
      (FPCore (c x y) :precision binary64 (* c (log1p (* (expm1 x) y))))
      double code(double c, double x, double y) {
      	return c * log1p((expm1(x) * y));
      }
      
      public static double code(double c, double x, double y) {
      	return c * Math.log1p((Math.expm1(x) * y));
      }
      
      def code(c, x, y):
      	return c * math.log1p((math.expm1(x) * y))
      
      function code(c, x, y)
      	return Float64(c * log1p(Float64(expm1(x) * y)))
      end
      
      code[c_, x_, y_] := N[(c * N[Log[1 + N[(N[(Exp[x] - 1), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      c \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(x\right) \cdot y\right)
      \end{array}
      

      Reproduce

      ?
      herbie shell --seed 2025056 
      (FPCore (c x y)
        :name "Logarithmic Transform"
        :precision binary64
      
        :alt
        (* c (log1p (* (expm1 x) y)))
      
        (* c (log (+ 1.0 (* (- (pow (E) x) 1.0) y)))))