Logarithmic Transform

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

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

\\
\begin{array}{l}
\mathbf{if}\;y \leq -1.2 \cdot 10^{-21} \lor \neg \left(y \leq 9.5 \cdot 10^{-78}\right):\\
\;\;\;\;\mathsf{log1p}\left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c\\

\mathbf{else}:\\
\;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -1.2e-21 or 9.4999999999999997e-78 < y

    1. Initial program 38.1%

      \[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. *-commutativeN/A

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

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

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

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

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6445.4

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6499.6

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites99.6%

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

    if -1.2e-21 < y < 9.4999999999999997e-78

    1. Initial program 56.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. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      3. lower-*.f6456.0

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6476.0

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6476.0

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6487.8

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites87.8%

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

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

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

        \[\leadsto c \cdot \left(\left(e^{\color{blue}{1 \cdot x}} - 1\right) \cdot y\right) \]
      3. exp-prodN/A

        \[\leadsto c \cdot \left(\left(\color{blue}{{\left(e^{1}\right)}^{x}} - 1\right) \cdot y\right) \]
      4. e-exp-1N/A

        \[\leadsto c \cdot \left(\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
      5. associate-*r*N/A

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

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

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

        \[\leadsto \color{blue}{\left(\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot c\right)} \cdot y \]
      9. e-exp-1N/A

        \[\leadsto \left(\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right) \cdot c\right) \cdot y \]
      10. exp-prodN/A

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

        \[\leadsto \left(\left(e^{\color{blue}{x}} - 1\right) \cdot c\right) \cdot y \]
      12. lower-expm1.f6499.9

        \[\leadsto \left(\color{blue}{\mathsf{expm1}\left(x\right)} \cdot c\right) \cdot y \]
    7. Applied rewrites99.9%

      \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification99.8%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -1.2 \cdot 10^{-21} \lor \neg \left(y \leq 9.5 \cdot 10^{-78}\right):\\ \;\;\;\;\mathsf{log1p}\left(y \cdot \mathsf{expm1}\left(x\right)\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 91.6% accurate, 0.6× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq -1.65:\\ \;\;\;\;\mathsf{log1p}\left({\left(\frac{\mathsf{fma}\left(\frac{x}{y}, -0.5, {y}^{-1}\right)}{x}\right)}^{-1}\right) \cdot c\\ \mathbf{elif}\;y \leq 1.65:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\ \end{array} \end{array} \]
(FPCore (c x y)
 :precision binary64
 (if (<= y -1.65)
   (* (log1p (pow (/ (fma (/ x y) -0.5 (pow y -1.0)) x) -1.0)) c)
   (if (<= y 1.65) (* (* (expm1 x) c) y) (* (log1p (* y x)) c))))
double code(double c, double x, double y) {
	double tmp;
	if (y <= -1.65) {
		tmp = log1p(pow((fma((x / y), -0.5, pow(y, -1.0)) / x), -1.0)) * c;
	} else if (y <= 1.65) {
		tmp = (expm1(x) * c) * y;
	} else {
		tmp = log1p((y * x)) * c;
	}
	return tmp;
}
function code(c, x, y)
	tmp = 0.0
	if (y <= -1.65)
		tmp = Float64(log1p((Float64(fma(Float64(x / y), -0.5, (y ^ -1.0)) / x) ^ -1.0)) * c);
	elseif (y <= 1.65)
		tmp = Float64(Float64(expm1(x) * c) * y);
	else
		tmp = Float64(log1p(Float64(y * x)) * c);
	end
	return tmp
end
code[c_, x_, y_] := If[LessEqual[y, -1.65], N[(N[Log[1 + N[Power[N[(N[(N[(x / y), $MachinePrecision] * -0.5 + N[Power[y, -1.0], $MachinePrecision]), $MachinePrecision] / x), $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision], If[LessEqual[y, 1.65], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * c), $MachinePrecision] * y), $MachinePrecision], N[(N[Log[1 + N[(y * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;y \leq -1.65:\\
\;\;\;\;\mathsf{log1p}\left({\left(\frac{\mathsf{fma}\left(\frac{x}{y}, -0.5, {y}^{-1}\right)}{x}\right)}^{-1}\right) \cdot c\\

\mathbf{elif}\;y \leq 1.65:\\
\;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\

\mathbf{else}:\\
\;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if y < -1.6499999999999999

    1. Initial program 49.2%

      \[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. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      3. lower-*.f6449.2

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6449.2

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6449.2

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6499.5

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites99.5%

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

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

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\left(y \cdot \mathsf{expm1}\left(x\right)\right)}\right) \cdot c \]
      3. remove-double-divN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \color{blue}{\frac{1}{\frac{1}{\mathsf{expm1}\left(x\right)}}}\right)\right) \cdot c \]
      4. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      5. lift-pow.f64N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      6. div-invN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{y}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right) \cdot c \]
      7. frac-2negN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{\mathsf{neg}\left(y\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      8. associate-*r/N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      9. clear-numN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      10. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      11. lower-/.f64N/A

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

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      13. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{\frac{1}{\mathsf{expm1}\left(x\right)}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      14. distribute-neg-fracN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{\mathsf{neg}\left(1\right)}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      15. metadata-evalN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{\color{blue}{-1}}{\mathsf{expm1}\left(x\right)}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      16. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{-1}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      17. lower-*.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{\color{blue}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      18. lower-neg.f6499.4

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{1 \cdot \color{blue}{\left(-y\right)}}}\right) \cdot c \]
    6. Applied rewrites99.4%

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

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

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

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

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\mathsf{fma}\left(\frac{x}{y}, \frac{-1}{2}, \frac{1}{y}\right)}}{x}}\right) \cdot c \]
      4. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{fma}\left(\color{blue}{\frac{x}{y}}, \frac{-1}{2}, \frac{1}{y}\right)}{x}}\right) \cdot c \]
      5. lower-/.f6470.5

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{fma}\left(\frac{x}{y}, -0.5, \color{blue}{\frac{1}{y}}\right)}{x}}\right) \cdot c \]
    9. Applied rewrites70.5%

      \[\leadsto \mathsf{log1p}\left(\frac{1}{\color{blue}{\frac{\mathsf{fma}\left(\frac{x}{y}, -0.5, \frac{1}{y}\right)}{x}}}\right) \cdot c \]

    if -1.6499999999999999 < y < 1.6499999999999999

    1. Initial program 52.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. *-commutativeN/A

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

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6474.5

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6474.5

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6489.9

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites89.9%

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

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

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

        \[\leadsto c \cdot \left(\left(e^{\color{blue}{1 \cdot x}} - 1\right) \cdot y\right) \]
      3. exp-prodN/A

        \[\leadsto c \cdot \left(\left(\color{blue}{{\left(e^{1}\right)}^{x}} - 1\right) \cdot y\right) \]
      4. e-exp-1N/A

        \[\leadsto c \cdot \left(\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
      5. associate-*r*N/A

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

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

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

        \[\leadsto \color{blue}{\left(\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot c\right)} \cdot y \]
      9. e-exp-1N/A

        \[\leadsto \left(\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right) \cdot c\right) \cdot y \]
      10. exp-prodN/A

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

        \[\leadsto \left(\left(e^{\color{blue}{x}} - 1\right) \cdot c\right) \cdot y \]
      12. lower-expm1.f6499.1

        \[\leadsto \left(\color{blue}{\mathsf{expm1}\left(x\right)} \cdot c\right) \cdot y \]
    7. Applied rewrites99.1%

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

    if 1.6499999999999999 < y

    1. Initial program 21.5%

      \[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. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      3. lower-*.f6421.5

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6421.5

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6421.5

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6499.6

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites99.6%

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

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

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\left(y \cdot \mathsf{expm1}\left(x\right)\right)}\right) \cdot c \]
      3. remove-double-divN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \color{blue}{\frac{1}{\frac{1}{\mathsf{expm1}\left(x\right)}}}\right)\right) \cdot c \]
      4. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      5. lift-pow.f64N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      6. div-invN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{y}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right) \cdot c \]
      7. frac-2negN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{\mathsf{neg}\left(y\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      8. associate-*r/N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      9. clear-numN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      10. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      11. lower-/.f64N/A

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

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      13. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{\frac{1}{\mathsf{expm1}\left(x\right)}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      14. distribute-neg-fracN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{\mathsf{neg}\left(1\right)}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      15. metadata-evalN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{\color{blue}{-1}}{\mathsf{expm1}\left(x\right)}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      16. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{-1}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      17. lower-*.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{\color{blue}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      18. lower-neg.f6499.6

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{1 \cdot \color{blue}{\left(-y\right)}}}\right) \cdot c \]
    6. Applied rewrites99.6%

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

      \[\leadsto \mathsf{log1p}\left(\color{blue}{x \cdot y}\right) \cdot c \]
    8. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
      2. lower-*.f6499.6

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
    9. Applied rewrites99.6%

      \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
  3. Recombined 3 regimes into one program.
  4. Final simplification92.6%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -1.65:\\ \;\;\;\;\mathsf{log1p}\left({\left(\frac{\mathsf{fma}\left(\frac{x}{y}, -0.5, {y}^{-1}\right)}{x}\right)}^{-1}\right) \cdot c\\ \mathbf{elif}\;y \leq 1.65:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\ \end{array} \]
  5. Add Preprocessing

Alternative 3: 91.6% accurate, 1.6× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq -0.88:\\ \;\;\;\;\mathsf{log1p}\left(\frac{y}{\frac{\mathsf{fma}\left(-0.5, x, 1\right)}{x}}\right) \cdot c\\ \mathbf{elif}\;y \leq 1.65:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\ \end{array} \end{array} \]
(FPCore (c x y)
 :precision binary64
 (if (<= y -0.88)
   (* (log1p (/ y (/ (fma -0.5 x 1.0) x))) c)
   (if (<= y 1.65) (* (* (expm1 x) c) y) (* (log1p (* y x)) c))))
double code(double c, double x, double y) {
	double tmp;
	if (y <= -0.88) {
		tmp = log1p((y / (fma(-0.5, x, 1.0) / x))) * c;
	} else if (y <= 1.65) {
		tmp = (expm1(x) * c) * y;
	} else {
		tmp = log1p((y * x)) * c;
	}
	return tmp;
}
function code(c, x, y)
	tmp = 0.0
	if (y <= -0.88)
		tmp = Float64(log1p(Float64(y / Float64(fma(-0.5, x, 1.0) / x))) * c);
	elseif (y <= 1.65)
		tmp = Float64(Float64(expm1(x) * c) * y);
	else
		tmp = Float64(log1p(Float64(y * x)) * c);
	end
	return tmp
end
code[c_, x_, y_] := If[LessEqual[y, -0.88], N[(N[Log[1 + N[(y / N[(N[(-0.5 * x + 1.0), $MachinePrecision] / x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision], If[LessEqual[y, 1.65], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * c), $MachinePrecision] * y), $MachinePrecision], N[(N[Log[1 + N[(y * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;y \leq -0.88:\\
\;\;\;\;\mathsf{log1p}\left(\frac{y}{\frac{\mathsf{fma}\left(-0.5, x, 1\right)}{x}}\right) \cdot c\\

\mathbf{elif}\;y \leq 1.65:\\
\;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\

\mathbf{else}:\\
\;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if y < -0.880000000000000004

    1. Initial program 49.2%

      \[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 c \cdot \log \left(1 + \color{blue}{\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y}\right) \]
      2. *-commutativeN/A

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

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

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

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

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

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

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

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

        \[\leadsto c \cdot \log \left(1 + \frac{y}{\frac{1}{\color{blue}{{\mathsf{E}\left(\right)}^{x} - 1}}}\right) \]
      11. inv-powN/A

        \[\leadsto c \cdot \log \left(1 + \frac{y}{\color{blue}{{\left({\mathsf{E}\left(\right)}^{x} - 1\right)}^{-1}}}\right) \]
      12. metadata-evalN/A

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

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

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

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

        \[\leadsto c \cdot \log \left(1 + \frac{y}{{\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)}^{\left(\mathsf{neg}\left(1\right)\right)}}\right) \]
      17. e-exp-1N/A

        \[\leadsto c \cdot \log \left(1 + \frac{y}{{\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)}^{\left(\mathsf{neg}\left(1\right)\right)}}\right) \]
      18. pow-expN/A

        \[\leadsto c \cdot \log \left(1 + \frac{y}{{\left(\color{blue}{e^{1 \cdot x}} - 1\right)}^{\left(\mathsf{neg}\left(1\right)\right)}}\right) \]
      19. *-lft-identityN/A

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

        \[\leadsto c \cdot \log \left(1 + \frac{y}{{\color{blue}{\left(\mathsf{expm1}\left(x\right)\right)}}^{\left(\mathsf{neg}\left(1\right)\right)}}\right) \]
      21. metadata-eval66.8

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

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

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

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

        \[\leadsto c \cdot \log \left(1 + \frac{y}{\frac{\color{blue}{\frac{-1}{2} \cdot x + 1}}{x}}\right) \]
      3. lower-fma.f6437.8

        \[\leadsto c \cdot \log \left(1 + \frac{y}{\frac{\color{blue}{\mathsf{fma}\left(-0.5, x, 1\right)}}{x}}\right) \]
    7. Applied rewrites37.8%

      \[\leadsto c \cdot \log \left(1 + \frac{y}{\color{blue}{\frac{\mathsf{fma}\left(-0.5, x, 1\right)}{x}}}\right) \]
    8. Step-by-step derivation
      1. lift-*.f64N/A

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

        \[\leadsto \color{blue}{\log \left(1 + \frac{y}{\frac{\mathsf{fma}\left(\frac{-1}{2}, x, 1\right)}{x}}\right) \cdot c} \]
      3. lower-*.f6437.8

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

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

        \[\leadsto \log \color{blue}{\left(1 + \frac{y}{\frac{\mathsf{fma}\left(\frac{-1}{2}, x, 1\right)}{x}}\right)} \cdot c \]
      6. lower-log1p.f6470.4

        \[\leadsto \color{blue}{\mathsf{log1p}\left(\frac{y}{\frac{\mathsf{fma}\left(-0.5, x, 1\right)}{x}}\right)} \cdot c \]
    9. Applied rewrites70.4%

      \[\leadsto \color{blue}{\mathsf{log1p}\left(\frac{y}{\frac{\mathsf{fma}\left(-0.5, x, 1\right)}{x}}\right) \cdot c} \]

    if -0.880000000000000004 < y < 1.6499999999999999

    1. Initial program 52.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. *-commutativeN/A

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

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6474.5

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6474.5

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6489.9

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites89.9%

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

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

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

        \[\leadsto c \cdot \left(\left(e^{\color{blue}{1 \cdot x}} - 1\right) \cdot y\right) \]
      3. exp-prodN/A

        \[\leadsto c \cdot \left(\left(\color{blue}{{\left(e^{1}\right)}^{x}} - 1\right) \cdot y\right) \]
      4. e-exp-1N/A

        \[\leadsto c \cdot \left(\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
      5. associate-*r*N/A

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

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

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

        \[\leadsto \color{blue}{\left(\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot c\right)} \cdot y \]
      9. e-exp-1N/A

        \[\leadsto \left(\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right) \cdot c\right) \cdot y \]
      10. exp-prodN/A

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

        \[\leadsto \left(\left(e^{\color{blue}{x}} - 1\right) \cdot c\right) \cdot y \]
      12. lower-expm1.f6499.1

        \[\leadsto \left(\color{blue}{\mathsf{expm1}\left(x\right)} \cdot c\right) \cdot y \]
    7. Applied rewrites99.1%

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

    if 1.6499999999999999 < y

    1. Initial program 21.5%

      \[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. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      3. lower-*.f6421.5

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6421.5

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6421.5

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6499.6

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites99.6%

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

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

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\left(y \cdot \mathsf{expm1}\left(x\right)\right)}\right) \cdot c \]
      3. remove-double-divN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \color{blue}{\frac{1}{\frac{1}{\mathsf{expm1}\left(x\right)}}}\right)\right) \cdot c \]
      4. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      5. lift-pow.f64N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      6. div-invN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{y}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right) \cdot c \]
      7. frac-2negN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{\mathsf{neg}\left(y\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      8. associate-*r/N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      9. clear-numN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      10. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      11. lower-/.f64N/A

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

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      13. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{\frac{1}{\mathsf{expm1}\left(x\right)}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      14. distribute-neg-fracN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{\mathsf{neg}\left(1\right)}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      15. metadata-evalN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{\color{blue}{-1}}{\mathsf{expm1}\left(x\right)}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      16. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{-1}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      17. lower-*.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{\color{blue}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      18. lower-neg.f6499.6

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{1 \cdot \color{blue}{\left(-y\right)}}}\right) \cdot c \]
    6. Applied rewrites99.6%

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

      \[\leadsto \mathsf{log1p}\left(\color{blue}{x \cdot y}\right) \cdot c \]
    8. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
      2. lower-*.f6499.6

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
    9. Applied rewrites99.6%

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

Alternative 4: 89.4% accurate, 1.8× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;y \leq -1700000 \lor \neg \left(y \leq 1.65\right):\\ \;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \end{array} \end{array} \]
(FPCore (c x y)
 :precision binary64
 (if (or (<= y -1700000.0) (not (<= y 1.65)))
   (* (log1p (* y x)) c)
   (* (* (expm1 x) c) y)))
double code(double c, double x, double y) {
	double tmp;
	if ((y <= -1700000.0) || !(y <= 1.65)) {
		tmp = log1p((y * x)) * c;
	} else {
		tmp = (expm1(x) * c) * y;
	}
	return tmp;
}
public static double code(double c, double x, double y) {
	double tmp;
	if ((y <= -1700000.0) || !(y <= 1.65)) {
		tmp = Math.log1p((y * x)) * c;
	} else {
		tmp = (Math.expm1(x) * c) * y;
	}
	return tmp;
}
def code(c, x, y):
	tmp = 0
	if (y <= -1700000.0) or not (y <= 1.65):
		tmp = math.log1p((y * x)) * c
	else:
		tmp = (math.expm1(x) * c) * y
	return tmp
function code(c, x, y)
	tmp = 0.0
	if ((y <= -1700000.0) || !(y <= 1.65))
		tmp = Float64(log1p(Float64(y * x)) * c);
	else
		tmp = Float64(Float64(expm1(x) * c) * y);
	end
	return tmp
end
code[c_, x_, y_] := If[Or[LessEqual[y, -1700000.0], N[Not[LessEqual[y, 1.65]], $MachinePrecision]], N[(N[Log[1 + N[(y * x), $MachinePrecision]], $MachinePrecision] * c), $MachinePrecision], N[(N[(N[(Exp[x] - 1), $MachinePrecision] * c), $MachinePrecision] * y), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;y \leq -1700000 \lor \neg \left(y \leq 1.65\right):\\
\;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\

\mathbf{else}:\\
\;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -1.7e6 or 1.6499999999999999 < y

    1. Initial program 38.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. *-commutativeN/A

        \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
      3. lower-*.f6438.7

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6438.7

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6438.7

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6499.5

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites99.5%

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

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

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\left(y \cdot \mathsf{expm1}\left(x\right)\right)}\right) \cdot c \]
      3. remove-double-divN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \color{blue}{\frac{1}{\frac{1}{\mathsf{expm1}\left(x\right)}}}\right)\right) \cdot c \]
      4. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      5. lift-pow.f64N/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \left(y \cdot \frac{1}{\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right)\right) \cdot c \]
      6. div-invN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{y}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}}\right) \cdot c \]
      7. frac-2negN/A

        \[\leadsto \mathsf{log1p}\left(1 \cdot \color{blue}{\frac{\mathsf{neg}\left(y\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      8. associate-*r/N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}}\right) \cdot c \]
      9. clear-numN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      10. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{\frac{1}{\frac{\mathsf{neg}\left({\left(\mathsf{expm1}\left(x\right)\right)}^{-1}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      11. lower-/.f64N/A

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

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{{\left(\mathsf{expm1}\left(x\right)\right)}^{-1}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      13. unpow-1N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\mathsf{neg}\left(\color{blue}{\frac{1}{\mathsf{expm1}\left(x\right)}}\right)}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      14. distribute-neg-fracN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{\mathsf{neg}\left(1\right)}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      15. metadata-evalN/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{\color{blue}{-1}}{\mathsf{expm1}\left(x\right)}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      16. lower-/.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\color{blue}{\frac{-1}{\mathsf{expm1}\left(x\right)}}}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}\right) \cdot c \]
      17. lower-*.f64N/A

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{\color{blue}{1 \cdot \left(\mathsf{neg}\left(y\right)\right)}}}\right) \cdot c \]
      18. lower-neg.f6499.5

        \[\leadsto \mathsf{log1p}\left(\frac{1}{\frac{\frac{-1}{\mathsf{expm1}\left(x\right)}}{1 \cdot \color{blue}{\left(-y\right)}}}\right) \cdot c \]
    6. Applied rewrites99.5%

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

      \[\leadsto \mathsf{log1p}\left(\color{blue}{x \cdot y}\right) \cdot c \]
    8. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
      2. lower-*.f6475.8

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot x}\right) \cdot c \]
    9. Applied rewrites75.8%

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

    if -1.7e6 < y < 1.6499999999999999

    1. Initial program 52.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. *-commutativeN/A

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

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

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

        \[\leadsto \log \color{blue}{\left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right)} \cdot c \]
      6. lower-log1p.f6474.2

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

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

        \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
      9. lower-*.f6474.2

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

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

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

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
      13. e-exp-1N/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
      14. pow-expN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
      15. *-lft-identityN/A

        \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
      16. lower-expm1.f6490.0

        \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
    4. Applied rewrites90.0%

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

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

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

        \[\leadsto c \cdot \left(\left(e^{\color{blue}{1 \cdot x}} - 1\right) \cdot y\right) \]
      3. exp-prodN/A

        \[\leadsto c \cdot \left(\left(\color{blue}{{\left(e^{1}\right)}^{x}} - 1\right) \cdot y\right) \]
      4. e-exp-1N/A

        \[\leadsto c \cdot \left(\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
      5. associate-*r*N/A

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

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

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

        \[\leadsto \color{blue}{\left(\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot c\right)} \cdot y \]
      9. e-exp-1N/A

        \[\leadsto \left(\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right) \cdot c\right) \cdot y \]
      10. exp-prodN/A

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

        \[\leadsto \left(\left(e^{\color{blue}{x}} - 1\right) \cdot c\right) \cdot y \]
      12. lower-expm1.f6498.6

        \[\leadsto \left(\color{blue}{\mathsf{expm1}\left(x\right)} \cdot c\right) \cdot y \]
    7. Applied rewrites98.6%

      \[\leadsto \color{blue}{\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification90.5%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -1700000 \lor \neg \left(y \leq 1.65\right):\\ \;\;\;\;\mathsf{log1p}\left(y \cdot x\right) \cdot c\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y\\ \end{array} \]
  5. Add Preprocessing

Alternative 5: 76.7% accurate, 2.0× speedup?

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

\\
\left(\mathsf{expm1}\left(x\right) \cdot c\right) \cdot y
\end{array}
Derivation
  1. Initial program 47.5%

    \[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. *-commutativeN/A

      \[\leadsto \color{blue}{\log \left(1 + \left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot y\right) \cdot c} \]
    3. lower-*.f6447.5

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

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

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

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

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

      \[\leadsto \mathsf{log1p}\left(\color{blue}{y \cdot \left({\mathsf{E}\left(\right)}^{x} - 1\right)}\right) \cdot c \]
    9. lower-*.f6461.4

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

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

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

      \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right)\right) \cdot c \]
    13. e-exp-1N/A

      \[\leadsto \mathsf{log1p}\left(y \cdot \left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right)\right) \cdot c \]
    14. pow-expN/A

      \[\leadsto \mathsf{log1p}\left(y \cdot \left(\color{blue}{e^{1 \cdot x}} - 1\right)\right) \cdot c \]
    15. *-lft-identityN/A

      \[\leadsto \mathsf{log1p}\left(y \cdot \left(e^{\color{blue}{x}} - 1\right)\right) \cdot c \]
    16. lower-expm1.f6493.4

      \[\leadsto \mathsf{log1p}\left(y \cdot \color{blue}{\mathsf{expm1}\left(x\right)}\right) \cdot c \]
  4. Applied rewrites93.4%

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

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

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

      \[\leadsto c \cdot \left(\left(e^{\color{blue}{1 \cdot x}} - 1\right) \cdot y\right) \]
    3. exp-prodN/A

      \[\leadsto c \cdot \left(\left(\color{blue}{{\left(e^{1}\right)}^{x}} - 1\right) \cdot y\right) \]
    4. e-exp-1N/A

      \[\leadsto c \cdot \left(\left({\color{blue}{\mathsf{E}\left(\right)}}^{x} - 1\right) \cdot y\right) \]
    5. associate-*r*N/A

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

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

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

      \[\leadsto \color{blue}{\left(\left({\mathsf{E}\left(\right)}^{x} - 1\right) \cdot c\right)} \cdot y \]
    9. e-exp-1N/A

      \[\leadsto \left(\left({\color{blue}{\left(e^{1}\right)}}^{x} - 1\right) \cdot c\right) \cdot y \]
    10. exp-prodN/A

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

      \[\leadsto \left(\left(e^{\color{blue}{x}} - 1\right) \cdot c\right) \cdot y \]
    12. lower-expm1.f6479.2

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

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

Alternative 6: 63.3% accurate, 12.8× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;c \leq 10^{-23}:\\ \;\;\;\;\left(c \cdot y\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot c\right) \cdot y\\ \end{array} \end{array} \]
(FPCore (c x y)
 :precision binary64
 (if (<= c 1e-23) (* (* c y) x) (* (* x c) y)))
double code(double c, double x, double y) {
	double tmp;
	if (c <= 1e-23) {
		tmp = (c * y) * x;
	} else {
		tmp = (x * c) * y;
	}
	return tmp;
}
real(8) function code(c, x, y)
    real(8), intent (in) :: c
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8) :: tmp
    if (c <= 1d-23) then
        tmp = (c * y) * x
    else
        tmp = (x * c) * y
    end if
    code = tmp
end function
public static double code(double c, double x, double y) {
	double tmp;
	if (c <= 1e-23) {
		tmp = (c * y) * x;
	} else {
		tmp = (x * c) * y;
	}
	return tmp;
}
def code(c, x, y):
	tmp = 0
	if c <= 1e-23:
		tmp = (c * y) * x
	else:
		tmp = (x * c) * y
	return tmp
function code(c, x, y)
	tmp = 0.0
	if (c <= 1e-23)
		tmp = Float64(Float64(c * y) * x);
	else
		tmp = Float64(Float64(x * c) * y);
	end
	return tmp
end
function tmp_2 = code(c, x, y)
	tmp = 0.0;
	if (c <= 1e-23)
		tmp = (c * y) * x;
	else
		tmp = (x * c) * y;
	end
	tmp_2 = tmp;
end
code[c_, x_, y_] := If[LessEqual[c, 1e-23], N[(N[(c * y), $MachinePrecision] * x), $MachinePrecision], N[(N[(x * c), $MachinePrecision] * y), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;c \leq 10^{-23}:\\
\;\;\;\;\left(c \cdot y\right) \cdot x\\

\mathbf{else}:\\
\;\;\;\;\left(x \cdot c\right) \cdot y\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if c < 9.9999999999999996e-24

    1. Initial program 54.5%

      \[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 \color{blue}{\left(c \cdot x\right) \cdot \left(y \cdot \log \mathsf{E}\left(\right)\right)} \]
      2. log-EN/A

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

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

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

        \[\leadsto \color{blue}{y \cdot \left(c \cdot x\right)} \]
      6. associate-*l*N/A

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

        \[\leadsto \color{blue}{\left(c \cdot y\right)} \cdot x \]
      8. *-rgt-identityN/A

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

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

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

        \[\leadsto \left(c \cdot \left(y \cdot {\color{blue}{1}}^{2}\right)\right) \cdot x \]
      12. metadata-evalN/A

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

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

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

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

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

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

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

    if 9.9999999999999996e-24 < c

    1. Initial program 26.9%

      \[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 \color{blue}{\left(c \cdot x\right) \cdot \left(y \cdot \log \mathsf{E}\left(\right)\right)} \]
      2. log-EN/A

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

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

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

        \[\leadsto \color{blue}{y \cdot \left(c \cdot x\right)} \]
      6. associate-*l*N/A

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

        \[\leadsto \color{blue}{\left(c \cdot y\right)} \cdot x \]
      8. *-rgt-identityN/A

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

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

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

        \[\leadsto \left(c \cdot \left(y \cdot {\color{blue}{1}}^{2}\right)\right) \cdot x \]
      12. metadata-evalN/A

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

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

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

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

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

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

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

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

    Alternative 7: 61.7% 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;
    }
    
    real(8) function code(c, x, y)
        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 47.5%

      \[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 \color{blue}{\left(c \cdot x\right) \cdot \left(y \cdot \log \mathsf{E}\left(\right)\right)} \]
      2. log-EN/A

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

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

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

        \[\leadsto \color{blue}{y \cdot \left(c \cdot x\right)} \]
      6. associate-*l*N/A

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

        \[\leadsto \color{blue}{\left(c \cdot y\right)} \cdot x \]
      8. *-rgt-identityN/A

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

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

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

        \[\leadsto \left(c \cdot \left(y \cdot {\color{blue}{1}}^{2}\right)\right) \cdot x \]
      12. metadata-evalN/A

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

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

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

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

        \[\leadsto \left(c \cdot \color{blue}{y}\right) \cdot x \]
      17. lower-*.f6464.4

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

      \[\leadsto \color{blue}{\left(c \cdot y\right) \cdot x} \]
    6. Add Preprocessing

    Developer Target 1: 93.4% 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 2024318 
    (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)))))