Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3

Percentage Accurate: 88.6% → 99.9%
Time: 7.2s
Alternatives: 9
Speedup: 1.1×

Specification

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

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

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 9 alternatives:

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

Initial Program: 88.6% accurate, 1.0× speedup?

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

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

Alternative 1: 99.9% accurate, 0.8× speedup?

\[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \leq 4 \cdot 10^{-26}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{x\_m}{z}, 1 + y, -x\_m\right)\\ \end{array} \end{array} \]
x\_m = (fabs.f64 x)
x\_s = (copysign.f64 #s(literal 1 binary64) x)
(FPCore (x_s x_m y z)
 :precision binary64
 (*
  x_s
  (if (<= x_m 4e-26)
    (- (/ (fma y x_m x_m) z) x_m)
    (fma (/ x_m z) (+ 1.0 y) (- x_m)))))
x\_m = fabs(x);
x\_s = copysign(1.0, x);
double code(double x_s, double x_m, double y, double z) {
	double tmp;
	if (x_m <= 4e-26) {
		tmp = (fma(y, x_m, x_m) / z) - x_m;
	} else {
		tmp = fma((x_m / z), (1.0 + y), -x_m);
	}
	return x_s * tmp;
}
x\_m = abs(x)
x\_s = copysign(1.0, x)
function code(x_s, x_m, y, z)
	tmp = 0.0
	if (x_m <= 4e-26)
		tmp = Float64(Float64(fma(y, x_m, x_m) / z) - x_m);
	else
		tmp = fma(Float64(x_m / z), Float64(1.0 + y), Float64(-x_m));
	end
	return Float64(x_s * tmp)
end
x\_m = N[Abs[x], $MachinePrecision]
x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * If[LessEqual[x$95$m, 4e-26], N[(N[(N[(y * x$95$m + x$95$m), $MachinePrecision] / z), $MachinePrecision] - x$95$m), $MachinePrecision], N[(N[(x$95$m / z), $MachinePrecision] * N[(1.0 + y), $MachinePrecision] + (-x$95$m)), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
x\_m = \left|x\right|
\\
x\_s = \mathsf{copysign}\left(1, x\right)

\\
x\_s \cdot \begin{array}{l}
\mathbf{if}\;x\_m \leq 4 \cdot 10^{-26}:\\
\;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x\_m}{z}, 1 + y, -x\_m\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if x < 4.0000000000000002e-26

    1. Initial program 90.5%

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

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

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

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

        \[\leadsto \frac{\left(y - z\right) \cdot x + \color{blue}{x}}{z} \]
      5. lower-fma.f6490.5

        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
    4. Applied rewrites90.5%

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
    5. Step-by-step derivation
      1. lift-/.f64N/A

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

        \[\leadsto \frac{\color{blue}{\left(y - z\right) \cdot x + x}}{z} \]
      3. distribute-lft1-inN/A

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

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

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

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

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

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

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

        \[\leadsto \frac{x}{z} \cdot \color{blue}{\left(\left(y - z\right) - -1\right)} \]
      11. sub-negN/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \left(\color{blue}{{z}^{-1}} \cdot z\right) \]
      10. pow-plusN/A

        \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \color{blue}{{z}^{\left(-1 + 1\right)}} \]
      11. metadata-evalN/A

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

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

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

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

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

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

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

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

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

        \[\leadsto \frac{\color{blue}{y \cdot x + 1 \cdot x}}{z} - x \]
      21. *-lft-identityN/A

        \[\leadsto \frac{y \cdot x + \color{blue}{x}}{z} - x \]
      22. lower-fma.f6497.0

        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y, x, x\right)}}{z} - x \]
    8. Applied rewrites97.0%

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

    if 4.0000000000000002e-26 < x

    1. Initial program 79.3%

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

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

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

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

        \[\leadsto \frac{\left(y - z\right) \cdot x + \color{blue}{x}}{z} \]
      5. lower-fma.f6479.3

        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
    4. Applied rewrites79.3%

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
    5. Step-by-step derivation
      1. lift-/.f64N/A

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

        \[\leadsto \frac{\color{blue}{\left(y - z\right) \cdot x + x}}{z} \]
      3. distribute-lft1-inN/A

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

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

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

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

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

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

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

        \[\leadsto \frac{x}{z} \cdot \color{blue}{\left(\left(y - z\right) - -1\right)} \]
      11. sub-negN/A

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

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

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

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

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

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

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

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

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

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, 1 + y, \color{blue}{\frac{x}{z} \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
      21. lower-neg.f6490.5

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, 1 + y, \frac{x}{z} \cdot \color{blue}{\left(-z\right)}\right) \]
    6. Applied rewrites90.5%

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

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

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, \color{blue}{y + 1}, \frac{x}{z} \cdot \left(-z\right)\right) \]
      3. lower-+.f6490.5

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

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

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

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

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

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

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

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, y + 1, \mathsf{neg}\left(x \cdot \left(\color{blue}{{z}^{-1}} \cdot z\right)\right)\right) \]
      11. pow-plusN/A

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, y + 1, \mathsf{neg}\left(x \cdot \color{blue}{{z}^{\left(-1 + 1\right)}}\right)\right) \]
      12. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\frac{x}{z}, y + 1, \mathsf{neg}\left(x \cdot {z}^{\color{blue}{0}}\right)\right) \]
      13. metadata-evalN/A

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

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

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x}{z}, y + 1, -x\right)} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification97.7%

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \leq 4 \cdot 10^{-26}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, x, x\right)}{z} - x\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{x}{z}, 1 + y, -x\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 85.1% accurate, 0.8× speedup?

\[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;\frac{y \cdot x\_m}{z}\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x\_m}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z}\\ \end{array} \end{array} \]
x\_m = (fabs.f64 x)
x\_s = (copysign.f64 #s(literal 1 binary64) x)
(FPCore (x_s x_m y z)
 :precision binary64
 (*
  x_s
  (if (<= y -1.3e+43)
    (/ (* y x_m) z)
    (if (<= y 1.55e+36) (- (/ x_m z) x_m) (/ (fma y x_m x_m) z)))))
x\_m = fabs(x);
x\_s = copysign(1.0, x);
double code(double x_s, double x_m, double y, double z) {
	double tmp;
	if (y <= -1.3e+43) {
		tmp = (y * x_m) / z;
	} else if (y <= 1.55e+36) {
		tmp = (x_m / z) - x_m;
	} else {
		tmp = fma(y, x_m, x_m) / z;
	}
	return x_s * tmp;
}
x\_m = abs(x)
x\_s = copysign(1.0, x)
function code(x_s, x_m, y, z)
	tmp = 0.0
	if (y <= -1.3e+43)
		tmp = Float64(Float64(y * x_m) / z);
	elseif (y <= 1.55e+36)
		tmp = Float64(Float64(x_m / z) - x_m);
	else
		tmp = Float64(fma(y, x_m, x_m) / z);
	end
	return Float64(x_s * tmp)
end
x\_m = N[Abs[x], $MachinePrecision]
x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * If[LessEqual[y, -1.3e+43], N[(N[(y * x$95$m), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[y, 1.55e+36], N[(N[(x$95$m / z), $MachinePrecision] - x$95$m), $MachinePrecision], N[(N[(y * x$95$m + x$95$m), $MachinePrecision] / z), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
x\_m = \left|x\right|
\\
x\_s = \mathsf{copysign}\left(1, x\right)

\\
x\_s \cdot \begin{array}{l}
\mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;\frac{y \cdot x\_m}{z}\\

\mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\
\;\;\;\;\frac{x\_m}{z} - x\_m\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z}\\


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

    1. Initial program 84.1%

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

      \[\leadsto \frac{\color{blue}{x \cdot y}}{z} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]
      2. lower-*.f6481.4

        \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]
    5. Applied rewrites81.4%

      \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]

    if -1.3000000000000001e43 < y < 1.55e36

    1. Initial program 88.4%

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

      \[\leadsto \color{blue}{\frac{x \cdot \left(1 - z\right)}{z}} \]
    4. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \color{blue}{x \cdot \frac{1 - z}{z}} \]
      2. div-subN/A

        \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} - \frac{z}{z}\right)} \]
      3. sub-negN/A

        \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} + \left(\mathsf{neg}\left(\frac{z}{z}\right)\right)\right)} \]
      4. *-inversesN/A

        \[\leadsto x \cdot \left(\frac{1}{z} + \left(\mathsf{neg}\left(\color{blue}{1}\right)\right)\right) \]
      5. metadata-evalN/A

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

        \[\leadsto \color{blue}{x \cdot \frac{1}{z} + x \cdot -1} \]
      7. associate-/l*N/A

        \[\leadsto \color{blue}{\frac{x \cdot 1}{z}} + x \cdot -1 \]
      8. *-rgt-identityN/A

        \[\leadsto \frac{\color{blue}{x}}{z} + x \cdot -1 \]
      9. *-commutativeN/A

        \[\leadsto \frac{x}{z} + \color{blue}{-1 \cdot x} \]
      10. mul-1-negN/A

        \[\leadsto \frac{x}{z} + \color{blue}{\left(\mathsf{neg}\left(x\right)\right)} \]
      11. unsub-negN/A

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      12. lower--.f64N/A

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      13. lower-/.f6497.2

        \[\leadsto \color{blue}{\frac{x}{z}} - x \]
    5. Applied rewrites97.2%

      \[\leadsto \color{blue}{\frac{x}{z} - x} \]

    if 1.55e36 < y

    1. Initial program 88.5%

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

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

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

        \[\leadsto \frac{\color{blue}{y \cdot x + 1 \cdot x}}{z} \]
      3. *-lft-identityN/A

        \[\leadsto \frac{y \cdot x + \color{blue}{x}}{z} \]
      4. lower-fma.f6478.0

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y, x, x\right)}}{z} \]
  3. Recombined 3 regimes into one program.
  4. Add Preprocessing

Alternative 3: 85.1% accurate, 0.8× speedup?

\[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ \begin{array}{l} t_0 := \frac{y \cdot x\_m}{z}\\ x\_s \cdot \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x\_m}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \end{array} \]
x\_m = (fabs.f64 x)
x\_s = (copysign.f64 #s(literal 1 binary64) x)
(FPCore (x_s x_m y z)
 :precision binary64
 (let* ((t_0 (/ (* y x_m) z)))
   (*
    x_s
    (if (<= y -1.3e+43) t_0 (if (<= y 1.55e+36) (- (/ x_m z) x_m) t_0)))))
x\_m = fabs(x);
x\_s = copysign(1.0, x);
double code(double x_s, double x_m, double y, double z) {
	double t_0 = (y * x_m) / z;
	double tmp;
	if (y <= -1.3e+43) {
		tmp = t_0;
	} else if (y <= 1.55e+36) {
		tmp = (x_m / z) - x_m;
	} else {
		tmp = t_0;
	}
	return x_s * tmp;
}
x\_m = abs(x)
x\_s = copysign(1.0d0, x)
real(8) function code(x_s, x_m, y, z)
    real(8), intent (in) :: x_s
    real(8), intent (in) :: x_m
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: t_0
    real(8) :: tmp
    t_0 = (y * x_m) / z
    if (y <= (-1.3d+43)) then
        tmp = t_0
    else if (y <= 1.55d+36) then
        tmp = (x_m / z) - x_m
    else
        tmp = t_0
    end if
    code = x_s * tmp
end function
x\_m = Math.abs(x);
x\_s = Math.copySign(1.0, x);
public static double code(double x_s, double x_m, double y, double z) {
	double t_0 = (y * x_m) / z;
	double tmp;
	if (y <= -1.3e+43) {
		tmp = t_0;
	} else if (y <= 1.55e+36) {
		tmp = (x_m / z) - x_m;
	} else {
		tmp = t_0;
	}
	return x_s * tmp;
}
x\_m = math.fabs(x)
x\_s = math.copysign(1.0, x)
def code(x_s, x_m, y, z):
	t_0 = (y * x_m) / z
	tmp = 0
	if y <= -1.3e+43:
		tmp = t_0
	elif y <= 1.55e+36:
		tmp = (x_m / z) - x_m
	else:
		tmp = t_0
	return x_s * tmp
x\_m = abs(x)
x\_s = copysign(1.0, x)
function code(x_s, x_m, y, z)
	t_0 = Float64(Float64(y * x_m) / z)
	tmp = 0.0
	if (y <= -1.3e+43)
		tmp = t_0;
	elseif (y <= 1.55e+36)
		tmp = Float64(Float64(x_m / z) - x_m);
	else
		tmp = t_0;
	end
	return Float64(x_s * tmp)
end
x\_m = abs(x);
x\_s = sign(x) * abs(1.0);
function tmp_2 = code(x_s, x_m, y, z)
	t_0 = (y * x_m) / z;
	tmp = 0.0;
	if (y <= -1.3e+43)
		tmp = t_0;
	elseif (y <= 1.55e+36)
		tmp = (x_m / z) - x_m;
	else
		tmp = t_0;
	end
	tmp_2 = x_s * tmp;
end
x\_m = N[Abs[x], $MachinePrecision]
x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[x$95$s_, x$95$m_, y_, z_] := Block[{t$95$0 = N[(N[(y * x$95$m), $MachinePrecision] / z), $MachinePrecision]}, N[(x$95$s * If[LessEqual[y, -1.3e+43], t$95$0, If[LessEqual[y, 1.55e+36], N[(N[(x$95$m / z), $MachinePrecision] - x$95$m), $MachinePrecision], t$95$0]]), $MachinePrecision]]
\begin{array}{l}
x\_m = \left|x\right|
\\
x\_s = \mathsf{copysign}\left(1, x\right)

\\
\begin{array}{l}
t_0 := \frac{y \cdot x\_m}{z}\\
x\_s \cdot \begin{array}{l}
\mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;t\_0\\

\mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\
\;\;\;\;\frac{x\_m}{z} - x\_m\\

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


\end{array}
\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -1.3000000000000001e43 or 1.55e36 < y

    1. Initial program 86.9%

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

      \[\leadsto \frac{\color{blue}{x \cdot y}}{z} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]
      2. lower-*.f6479.2

        \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]
    5. Applied rewrites79.2%

      \[\leadsto \frac{\color{blue}{y \cdot x}}{z} \]

    if -1.3000000000000001e43 < y < 1.55e36

    1. Initial program 88.4%

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

      \[\leadsto \color{blue}{\frac{x \cdot \left(1 - z\right)}{z}} \]
    4. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \color{blue}{x \cdot \frac{1 - z}{z}} \]
      2. div-subN/A

        \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} - \frac{z}{z}\right)} \]
      3. sub-negN/A

        \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} + \left(\mathsf{neg}\left(\frac{z}{z}\right)\right)\right)} \]
      4. *-inversesN/A

        \[\leadsto x \cdot \left(\frac{1}{z} + \left(\mathsf{neg}\left(\color{blue}{1}\right)\right)\right) \]
      5. metadata-evalN/A

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

        \[\leadsto \color{blue}{x \cdot \frac{1}{z} + x \cdot -1} \]
      7. associate-/l*N/A

        \[\leadsto \color{blue}{\frac{x \cdot 1}{z}} + x \cdot -1 \]
      8. *-rgt-identityN/A

        \[\leadsto \frac{\color{blue}{x}}{z} + x \cdot -1 \]
      9. *-commutativeN/A

        \[\leadsto \frac{x}{z} + \color{blue}{-1 \cdot x} \]
      10. mul-1-negN/A

        \[\leadsto \frac{x}{z} + \color{blue}{\left(\mathsf{neg}\left(x\right)\right)} \]
      11. unsub-negN/A

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      12. lower--.f64N/A

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      13. lower-/.f6497.2

        \[\leadsto \color{blue}{\frac{x}{z}} - x \]
    5. Applied rewrites97.2%

      \[\leadsto \color{blue}{\frac{x}{z} - x} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 4: 84.0% accurate, 0.8× speedup?

\[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;\frac{x\_m}{z} \cdot y\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x\_m}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{z} \cdot x\_m\\ \end{array} \end{array} \]
x\_m = (fabs.f64 x)
x\_s = (copysign.f64 #s(literal 1 binary64) x)
(FPCore (x_s x_m y z)
 :precision binary64
 (*
  x_s
  (if (<= y -1.3e+43)
    (* (/ x_m z) y)
    (if (<= y 1.55e+36) (- (/ x_m z) x_m) (* (/ y z) x_m)))))
x\_m = fabs(x);
x\_s = copysign(1.0, x);
double code(double x_s, double x_m, double y, double z) {
	double tmp;
	if (y <= -1.3e+43) {
		tmp = (x_m / z) * y;
	} else if (y <= 1.55e+36) {
		tmp = (x_m / z) - x_m;
	} else {
		tmp = (y / z) * x_m;
	}
	return x_s * tmp;
}
x\_m = abs(x)
x\_s = copysign(1.0d0, x)
real(8) function code(x_s, x_m, y, z)
    real(8), intent (in) :: x_s
    real(8), intent (in) :: x_m
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= (-1.3d+43)) then
        tmp = (x_m / z) * y
    else if (y <= 1.55d+36) then
        tmp = (x_m / z) - x_m
    else
        tmp = (y / z) * x_m
    end if
    code = x_s * tmp
end function
x\_m = Math.abs(x);
x\_s = Math.copySign(1.0, x);
public static double code(double x_s, double x_m, double y, double z) {
	double tmp;
	if (y <= -1.3e+43) {
		tmp = (x_m / z) * y;
	} else if (y <= 1.55e+36) {
		tmp = (x_m / z) - x_m;
	} else {
		tmp = (y / z) * x_m;
	}
	return x_s * tmp;
}
x\_m = math.fabs(x)
x\_s = math.copysign(1.0, x)
def code(x_s, x_m, y, z):
	tmp = 0
	if y <= -1.3e+43:
		tmp = (x_m / z) * y
	elif y <= 1.55e+36:
		tmp = (x_m / z) - x_m
	else:
		tmp = (y / z) * x_m
	return x_s * tmp
x\_m = abs(x)
x\_s = copysign(1.0, x)
function code(x_s, x_m, y, z)
	tmp = 0.0
	if (y <= -1.3e+43)
		tmp = Float64(Float64(x_m / z) * y);
	elseif (y <= 1.55e+36)
		tmp = Float64(Float64(x_m / z) - x_m);
	else
		tmp = Float64(Float64(y / z) * x_m);
	end
	return Float64(x_s * tmp)
end
x\_m = abs(x);
x\_s = sign(x) * abs(1.0);
function tmp_2 = code(x_s, x_m, y, z)
	tmp = 0.0;
	if (y <= -1.3e+43)
		tmp = (x_m / z) * y;
	elseif (y <= 1.55e+36)
		tmp = (x_m / z) - x_m;
	else
		tmp = (y / z) * x_m;
	end
	tmp_2 = x_s * tmp;
end
x\_m = N[Abs[x], $MachinePrecision]
x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * If[LessEqual[y, -1.3e+43], N[(N[(x$95$m / z), $MachinePrecision] * y), $MachinePrecision], If[LessEqual[y, 1.55e+36], N[(N[(x$95$m / z), $MachinePrecision] - x$95$m), $MachinePrecision], N[(N[(y / z), $MachinePrecision] * x$95$m), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
x\_m = \left|x\right|
\\
x\_s = \mathsf{copysign}\left(1, x\right)

\\
x\_s \cdot \begin{array}{l}
\mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;\frac{x\_m}{z} \cdot y\\

\mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\
\;\;\;\;\frac{x\_m}{z} - x\_m\\

\mathbf{else}:\\
\;\;\;\;\frac{y}{z} \cdot x\_m\\


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

    1. Initial program 84.1%

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

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}} \]
    4. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \color{blue}{x \cdot \frac{y}{z}} \]
      2. *-commutativeN/A

        \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
      3. lower-*.f64N/A

        \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
      4. lower-/.f6472.0

        \[\leadsto \color{blue}{\frac{y}{z}} \cdot x \]
    5. Applied rewrites72.0%

      \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
    6. Step-by-step derivation
      1. Applied rewrites76.2%

        \[\leadsto y \cdot \color{blue}{\frac{x}{z}} \]

      if -1.3000000000000001e43 < y < 1.55e36

      1. Initial program 88.4%

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

        \[\leadsto \color{blue}{\frac{x \cdot \left(1 - z\right)}{z}} \]
      4. Step-by-step derivation
        1. associate-/l*N/A

          \[\leadsto \color{blue}{x \cdot \frac{1 - z}{z}} \]
        2. div-subN/A

          \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} - \frac{z}{z}\right)} \]
        3. sub-negN/A

          \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} + \left(\mathsf{neg}\left(\frac{z}{z}\right)\right)\right)} \]
        4. *-inversesN/A

          \[\leadsto x \cdot \left(\frac{1}{z} + \left(\mathsf{neg}\left(\color{blue}{1}\right)\right)\right) \]
        5. metadata-evalN/A

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

          \[\leadsto \color{blue}{x \cdot \frac{1}{z} + x \cdot -1} \]
        7. associate-/l*N/A

          \[\leadsto \color{blue}{\frac{x \cdot 1}{z}} + x \cdot -1 \]
        8. *-rgt-identityN/A

          \[\leadsto \frac{\color{blue}{x}}{z} + x \cdot -1 \]
        9. *-commutativeN/A

          \[\leadsto \frac{x}{z} + \color{blue}{-1 \cdot x} \]
        10. mul-1-negN/A

          \[\leadsto \frac{x}{z} + \color{blue}{\left(\mathsf{neg}\left(x\right)\right)} \]
        11. unsub-negN/A

          \[\leadsto \color{blue}{\frac{x}{z} - x} \]
        12. lower--.f64N/A

          \[\leadsto \color{blue}{\frac{x}{z} - x} \]
        13. lower-/.f6497.2

          \[\leadsto \color{blue}{\frac{x}{z}} - x \]
      5. Applied rewrites97.2%

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]

      if 1.55e36 < y

      1. Initial program 88.5%

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

        \[\leadsto \color{blue}{\frac{x \cdot y}{z}} \]
      4. Step-by-step derivation
        1. associate-/l*N/A

          \[\leadsto \color{blue}{x \cdot \frac{y}{z}} \]
        2. *-commutativeN/A

          \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
        3. lower-*.f64N/A

          \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
        4. lower-/.f6473.0

          \[\leadsto \color{blue}{\frac{y}{z}} \cdot x \]
      5. Applied rewrites73.0%

        \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
    7. Recombined 3 regimes into one program.
    8. Final simplification86.7%

      \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x}{z} - x\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{z} \cdot x\\ \end{array} \]
    9. Add Preprocessing

    Alternative 5: 85.4% accurate, 0.8× speedup?

    \[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ \begin{array}{l} t_0 := \frac{x\_m}{z} \cdot y\\ x\_s \cdot \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x\_m}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \end{array} \]
    x\_m = (fabs.f64 x)
    x\_s = (copysign.f64 #s(literal 1 binary64) x)
    (FPCore (x_s x_m y z)
     :precision binary64
     (let* ((t_0 (* (/ x_m z) y)))
       (*
        x_s
        (if (<= y -1.3e+43) t_0 (if (<= y 1.55e+36) (- (/ x_m z) x_m) t_0)))))
    x\_m = fabs(x);
    x\_s = copysign(1.0, x);
    double code(double x_s, double x_m, double y, double z) {
    	double t_0 = (x_m / z) * y;
    	double tmp;
    	if (y <= -1.3e+43) {
    		tmp = t_0;
    	} else if (y <= 1.55e+36) {
    		tmp = (x_m / z) - x_m;
    	} else {
    		tmp = t_0;
    	}
    	return x_s * tmp;
    }
    
    x\_m = abs(x)
    x\_s = copysign(1.0d0, x)
    real(8) function code(x_s, x_m, y, z)
        real(8), intent (in) :: x_s
        real(8), intent (in) :: x_m
        real(8), intent (in) :: y
        real(8), intent (in) :: z
        real(8) :: t_0
        real(8) :: tmp
        t_0 = (x_m / z) * y
        if (y <= (-1.3d+43)) then
            tmp = t_0
        else if (y <= 1.55d+36) then
            tmp = (x_m / z) - x_m
        else
            tmp = t_0
        end if
        code = x_s * tmp
    end function
    
    x\_m = Math.abs(x);
    x\_s = Math.copySign(1.0, x);
    public static double code(double x_s, double x_m, double y, double z) {
    	double t_0 = (x_m / z) * y;
    	double tmp;
    	if (y <= -1.3e+43) {
    		tmp = t_0;
    	} else if (y <= 1.55e+36) {
    		tmp = (x_m / z) - x_m;
    	} else {
    		tmp = t_0;
    	}
    	return x_s * tmp;
    }
    
    x\_m = math.fabs(x)
    x\_s = math.copysign(1.0, x)
    def code(x_s, x_m, y, z):
    	t_0 = (x_m / z) * y
    	tmp = 0
    	if y <= -1.3e+43:
    		tmp = t_0
    	elif y <= 1.55e+36:
    		tmp = (x_m / z) - x_m
    	else:
    		tmp = t_0
    	return x_s * tmp
    
    x\_m = abs(x)
    x\_s = copysign(1.0, x)
    function code(x_s, x_m, y, z)
    	t_0 = Float64(Float64(x_m / z) * y)
    	tmp = 0.0
    	if (y <= -1.3e+43)
    		tmp = t_0;
    	elseif (y <= 1.55e+36)
    		tmp = Float64(Float64(x_m / z) - x_m);
    	else
    		tmp = t_0;
    	end
    	return Float64(x_s * tmp)
    end
    
    x\_m = abs(x);
    x\_s = sign(x) * abs(1.0);
    function tmp_2 = code(x_s, x_m, y, z)
    	t_0 = (x_m / z) * y;
    	tmp = 0.0;
    	if (y <= -1.3e+43)
    		tmp = t_0;
    	elseif (y <= 1.55e+36)
    		tmp = (x_m / z) - x_m;
    	else
    		tmp = t_0;
    	end
    	tmp_2 = x_s * tmp;
    end
    
    x\_m = N[Abs[x], $MachinePrecision]
    x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
    code[x$95$s_, x$95$m_, y_, z_] := Block[{t$95$0 = N[(N[(x$95$m / z), $MachinePrecision] * y), $MachinePrecision]}, N[(x$95$s * If[LessEqual[y, -1.3e+43], t$95$0, If[LessEqual[y, 1.55e+36], N[(N[(x$95$m / z), $MachinePrecision] - x$95$m), $MachinePrecision], t$95$0]]), $MachinePrecision]]
    
    \begin{array}{l}
    x\_m = \left|x\right|
    \\
    x\_s = \mathsf{copysign}\left(1, x\right)
    
    \\
    \begin{array}{l}
    t_0 := \frac{x\_m}{z} \cdot y\\
    x\_s \cdot \begin{array}{l}
    \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\
    \;\;\;\;t\_0\\
    
    \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\
    \;\;\;\;\frac{x\_m}{z} - x\_m\\
    
    \mathbf{else}:\\
    \;\;\;\;t\_0\\
    
    
    \end{array}
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if y < -1.3000000000000001e43 or 1.55e36 < y

      1. Initial program 86.9%

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

        \[\leadsto \color{blue}{\frac{x \cdot y}{z}} \]
      4. Step-by-step derivation
        1. associate-/l*N/A

          \[\leadsto \color{blue}{x \cdot \frac{y}{z}} \]
        2. *-commutativeN/A

          \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
        3. lower-*.f64N/A

          \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
        4. lower-/.f6472.6

          \[\leadsto \color{blue}{\frac{y}{z}} \cdot x \]
      5. Applied rewrites72.6%

        \[\leadsto \color{blue}{\frac{y}{z} \cdot x} \]
      6. Step-by-step derivation
        1. Applied rewrites73.4%

          \[\leadsto y \cdot \color{blue}{\frac{x}{z}} \]

        if -1.3000000000000001e43 < y < 1.55e36

        1. Initial program 88.4%

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

          \[\leadsto \color{blue}{\frac{x \cdot \left(1 - z\right)}{z}} \]
        4. Step-by-step derivation
          1. associate-/l*N/A

            \[\leadsto \color{blue}{x \cdot \frac{1 - z}{z}} \]
          2. div-subN/A

            \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} - \frac{z}{z}\right)} \]
          3. sub-negN/A

            \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} + \left(\mathsf{neg}\left(\frac{z}{z}\right)\right)\right)} \]
          4. *-inversesN/A

            \[\leadsto x \cdot \left(\frac{1}{z} + \left(\mathsf{neg}\left(\color{blue}{1}\right)\right)\right) \]
          5. metadata-evalN/A

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

            \[\leadsto \color{blue}{x \cdot \frac{1}{z} + x \cdot -1} \]
          7. associate-/l*N/A

            \[\leadsto \color{blue}{\frac{x \cdot 1}{z}} + x \cdot -1 \]
          8. *-rgt-identityN/A

            \[\leadsto \frac{\color{blue}{x}}{z} + x \cdot -1 \]
          9. *-commutativeN/A

            \[\leadsto \frac{x}{z} + \color{blue}{-1 \cdot x} \]
          10. mul-1-negN/A

            \[\leadsto \frac{x}{z} + \color{blue}{\left(\mathsf{neg}\left(x\right)\right)} \]
          11. unsub-negN/A

            \[\leadsto \color{blue}{\frac{x}{z} - x} \]
          12. lower--.f64N/A

            \[\leadsto \color{blue}{\frac{x}{z} - x} \]
          13. lower-/.f6497.2

            \[\leadsto \color{blue}{\frac{x}{z}} - x \]
        5. Applied rewrites97.2%

          \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      7. Recombined 2 regimes into one program.
      8. Final simplification86.3%

        \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -1.3 \cdot 10^{+43}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{elif}\;y \leq 1.55 \cdot 10^{+36}:\\ \;\;\;\;\frac{x}{z} - x\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \end{array} \]
      9. Add Preprocessing

      Alternative 6: 99.6% accurate, 0.8× speedup?

      \[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \leq 2 \cdot 10^{+69}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\\ \mathbf{else}:\\ \;\;\;\;\left(\left(y - z\right) - -1\right) \cdot \frac{x\_m}{z}\\ \end{array} \end{array} \]
      x\_m = (fabs.f64 x)
      x\_s = (copysign.f64 #s(literal 1 binary64) x)
      (FPCore (x_s x_m y z)
       :precision binary64
       (*
        x_s
        (if (<= x_m 2e+69)
          (- (/ (fma y x_m x_m) z) x_m)
          (* (- (- y z) -1.0) (/ x_m z)))))
      x\_m = fabs(x);
      x\_s = copysign(1.0, x);
      double code(double x_s, double x_m, double y, double z) {
      	double tmp;
      	if (x_m <= 2e+69) {
      		tmp = (fma(y, x_m, x_m) / z) - x_m;
      	} else {
      		tmp = ((y - z) - -1.0) * (x_m / z);
      	}
      	return x_s * tmp;
      }
      
      x\_m = abs(x)
      x\_s = copysign(1.0, x)
      function code(x_s, x_m, y, z)
      	tmp = 0.0
      	if (x_m <= 2e+69)
      		tmp = Float64(Float64(fma(y, x_m, x_m) / z) - x_m);
      	else
      		tmp = Float64(Float64(Float64(y - z) - -1.0) * Float64(x_m / z));
      	end
      	return Float64(x_s * tmp)
      end
      
      x\_m = N[Abs[x], $MachinePrecision]
      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
      code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * If[LessEqual[x$95$m, 2e+69], N[(N[(N[(y * x$95$m + x$95$m), $MachinePrecision] / z), $MachinePrecision] - x$95$m), $MachinePrecision], N[(N[(N[(y - z), $MachinePrecision] - -1.0), $MachinePrecision] * N[(x$95$m / z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
      
      \begin{array}{l}
      x\_m = \left|x\right|
      \\
      x\_s = \mathsf{copysign}\left(1, x\right)
      
      \\
      x\_s \cdot \begin{array}{l}
      \mathbf{if}\;x\_m \leq 2 \cdot 10^{+69}:\\
      \;\;\;\;\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\\
      
      \mathbf{else}:\\
      \;\;\;\;\left(\left(y - z\right) - -1\right) \cdot \frac{x\_m}{z}\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if x < 2.0000000000000001e69

        1. Initial program 90.9%

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

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

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

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

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

            \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
        4. Applied rewrites90.9%

          \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
        5. Step-by-step derivation
          1. lift-/.f64N/A

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

            \[\leadsto \frac{\color{blue}{\left(y - z\right) \cdot x + x}}{z} \]
          3. distribute-lft1-inN/A

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

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

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

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

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

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

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

            \[\leadsto \frac{x}{z} \cdot \color{blue}{\left(\left(y - z\right) - -1\right)} \]
          11. sub-negN/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \left(\color{blue}{{z}^{-1}} \cdot z\right) \]
          10. pow-plusN/A

            \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \color{blue}{{z}^{\left(-1 + 1\right)}} \]
          11. metadata-evalN/A

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

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

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

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

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

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

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

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

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

            \[\leadsto \frac{\color{blue}{y \cdot x + 1 \cdot x}}{z} - x \]
          21. *-lft-identityN/A

            \[\leadsto \frac{y \cdot x + \color{blue}{x}}{z} - x \]
          22. lower-fma.f6497.2

            \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y, x, x\right)}}{z} - x \]
        8. Applied rewrites97.2%

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

        if 2.0000000000000001e69 < x

        1. Initial program 72.8%

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

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

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

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

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

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

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

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

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

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

            \[\leadsto \frac{x}{z} \cdot \color{blue}{\left(y - \left(z - 1\right)\right)} \]
          11. sub-negN/A

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

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

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

            \[\leadsto \frac{x}{z} \cdot \left(\color{blue}{\left(y - z\right)} - -1\right) \]
          15. lower--.f6499.9

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

          \[\leadsto \color{blue}{\frac{x}{z} \cdot \left(\left(y - z\right) - -1\right)} \]
      3. Recombined 2 regimes into one program.
      4. Final simplification97.7%

        \[\leadsto \begin{array}{l} \mathbf{if}\;x \leq 2 \cdot 10^{+69}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, x, x\right)}{z} - x\\ \mathbf{else}:\\ \;\;\;\;\left(\left(y - z\right) - -1\right) \cdot \frac{x}{z}\\ \end{array} \]
      5. Add Preprocessing

      Alternative 7: 96.2% accurate, 1.1× speedup?

      \[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \left(\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\right) \end{array} \]
      x\_m = (fabs.f64 x)
      x\_s = (copysign.f64 #s(literal 1 binary64) x)
      (FPCore (x_s x_m y z)
       :precision binary64
       (* x_s (- (/ (fma y x_m x_m) z) x_m)))
      x\_m = fabs(x);
      x\_s = copysign(1.0, x);
      double code(double x_s, double x_m, double y, double z) {
      	return x_s * ((fma(y, x_m, x_m) / z) - x_m);
      }
      
      x\_m = abs(x)
      x\_s = copysign(1.0, x)
      function code(x_s, x_m, y, z)
      	return Float64(x_s * Float64(Float64(fma(y, x_m, x_m) / z) - x_m))
      end
      
      x\_m = N[Abs[x], $MachinePrecision]
      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
      code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * N[(N[(N[(y * x$95$m + x$95$m), $MachinePrecision] / z), $MachinePrecision] - x$95$m), $MachinePrecision]), $MachinePrecision]
      
      \begin{array}{l}
      x\_m = \left|x\right|
      \\
      x\_s = \mathsf{copysign}\left(1, x\right)
      
      \\
      x\_s \cdot \left(\frac{\mathsf{fma}\left(y, x\_m, x\_m\right)}{z} - x\_m\right)
      \end{array}
      
      Derivation
      1. Initial program 87.7%

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

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

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

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

          \[\leadsto \frac{\left(y - z\right) \cdot x + \color{blue}{x}}{z} \]
        5. lower-fma.f6487.7

          \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
      4. Applied rewrites87.7%

        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y - z, x, x\right)}}{z} \]
      5. Step-by-step derivation
        1. lift-/.f64N/A

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

          \[\leadsto \frac{\color{blue}{\left(y - z\right) \cdot x + x}}{z} \]
        3. distribute-lft1-inN/A

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

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

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

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

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

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

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

          \[\leadsto \frac{x}{z} \cdot \color{blue}{\left(\left(y - z\right) - -1\right)} \]
        11. sub-negN/A

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

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

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

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

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

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

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

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

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

          \[\leadsto \mathsf{fma}\left(\frac{x}{z}, 1 + y, \color{blue}{\frac{x}{z} \cdot \left(\mathsf{neg}\left(z\right)\right)}\right) \]
        21. lower-neg.f6481.3

          \[\leadsto \mathsf{fma}\left(\frac{x}{z}, 1 + y, \frac{x}{z} \cdot \color{blue}{\left(-z\right)}\right) \]
      6. Applied rewrites81.3%

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

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

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

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

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

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

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

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

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

          \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \left(\color{blue}{{z}^{-1}} \cdot z\right) \]
        10. pow-plusN/A

          \[\leadsto \frac{x}{z} \cdot \left(1 + y\right) - x \cdot \color{blue}{{z}^{\left(-1 + 1\right)}} \]
        11. metadata-evalN/A

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

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

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

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

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

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

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

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

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

          \[\leadsto \frac{\color{blue}{y \cdot x + 1 \cdot x}}{z} - x \]
        21. *-lft-identityN/A

          \[\leadsto \frac{y \cdot x + \color{blue}{x}}{z} - x \]
        22. lower-fma.f6495.8

          \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(y, x, x\right)}}{z} - x \]
      8. Applied rewrites95.8%

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

      Alternative 8: 65.1% accurate, 1.5× speedup?

      \[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \left(\frac{x\_m}{z} - x\_m\right) \end{array} \]
      x\_m = (fabs.f64 x)
      x\_s = (copysign.f64 #s(literal 1 binary64) x)
      (FPCore (x_s x_m y z) :precision binary64 (* x_s (- (/ x_m z) x_m)))
      x\_m = fabs(x);
      x\_s = copysign(1.0, x);
      double code(double x_s, double x_m, double y, double z) {
      	return x_s * ((x_m / z) - x_m);
      }
      
      x\_m = abs(x)
      x\_s = copysign(1.0d0, x)
      real(8) function code(x_s, x_m, y, z)
          real(8), intent (in) :: x_s
          real(8), intent (in) :: x_m
          real(8), intent (in) :: y
          real(8), intent (in) :: z
          code = x_s * ((x_m / z) - x_m)
      end function
      
      x\_m = Math.abs(x);
      x\_s = Math.copySign(1.0, x);
      public static double code(double x_s, double x_m, double y, double z) {
      	return x_s * ((x_m / z) - x_m);
      }
      
      x\_m = math.fabs(x)
      x\_s = math.copysign(1.0, x)
      def code(x_s, x_m, y, z):
      	return x_s * ((x_m / z) - x_m)
      
      x\_m = abs(x)
      x\_s = copysign(1.0, x)
      function code(x_s, x_m, y, z)
      	return Float64(x_s * Float64(Float64(x_m / z) - x_m))
      end
      
      x\_m = abs(x);
      x\_s = sign(x) * abs(1.0);
      function tmp = code(x_s, x_m, y, z)
      	tmp = x_s * ((x_m / z) - x_m);
      end
      
      x\_m = N[Abs[x], $MachinePrecision]
      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
      code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * N[(N[(x$95$m / z), $MachinePrecision] - x$95$m), $MachinePrecision]), $MachinePrecision]
      
      \begin{array}{l}
      x\_m = \left|x\right|
      \\
      x\_s = \mathsf{copysign}\left(1, x\right)
      
      \\
      x\_s \cdot \left(\frac{x\_m}{z} - x\_m\right)
      \end{array}
      
      Derivation
      1. Initial program 87.7%

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

        \[\leadsto \color{blue}{\frac{x \cdot \left(1 - z\right)}{z}} \]
      4. Step-by-step derivation
        1. associate-/l*N/A

          \[\leadsto \color{blue}{x \cdot \frac{1 - z}{z}} \]
        2. div-subN/A

          \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} - \frac{z}{z}\right)} \]
        3. sub-negN/A

          \[\leadsto x \cdot \color{blue}{\left(\frac{1}{z} + \left(\mathsf{neg}\left(\frac{z}{z}\right)\right)\right)} \]
        4. *-inversesN/A

          \[\leadsto x \cdot \left(\frac{1}{z} + \left(\mathsf{neg}\left(\color{blue}{1}\right)\right)\right) \]
        5. metadata-evalN/A

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

          \[\leadsto \color{blue}{x \cdot \frac{1}{z} + x \cdot -1} \]
        7. associate-/l*N/A

          \[\leadsto \color{blue}{\frac{x \cdot 1}{z}} + x \cdot -1 \]
        8. *-rgt-identityN/A

          \[\leadsto \frac{\color{blue}{x}}{z} + x \cdot -1 \]
        9. *-commutativeN/A

          \[\leadsto \frac{x}{z} + \color{blue}{-1 \cdot x} \]
        10. mul-1-negN/A

          \[\leadsto \frac{x}{z} + \color{blue}{\left(\mathsf{neg}\left(x\right)\right)} \]
        11. unsub-negN/A

          \[\leadsto \color{blue}{\frac{x}{z} - x} \]
        12. lower--.f64N/A

          \[\leadsto \color{blue}{\frac{x}{z} - x} \]
        13. lower-/.f6467.4

          \[\leadsto \color{blue}{\frac{x}{z}} - x \]
      5. Applied rewrites67.4%

        \[\leadsto \color{blue}{\frac{x}{z} - x} \]
      6. Add Preprocessing

      Alternative 9: 38.7% accurate, 7.7× speedup?

      \[\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \left(-x\_m\right) \end{array} \]
      x\_m = (fabs.f64 x)
      x\_s = (copysign.f64 #s(literal 1 binary64) x)
      (FPCore (x_s x_m y z) :precision binary64 (* x_s (- x_m)))
      x\_m = fabs(x);
      x\_s = copysign(1.0, x);
      double code(double x_s, double x_m, double y, double z) {
      	return x_s * -x_m;
      }
      
      x\_m = abs(x)
      x\_s = copysign(1.0d0, x)
      real(8) function code(x_s, x_m, y, z)
          real(8), intent (in) :: x_s
          real(8), intent (in) :: x_m
          real(8), intent (in) :: y
          real(8), intent (in) :: z
          code = x_s * -x_m
      end function
      
      x\_m = Math.abs(x);
      x\_s = Math.copySign(1.0, x);
      public static double code(double x_s, double x_m, double y, double z) {
      	return x_s * -x_m;
      }
      
      x\_m = math.fabs(x)
      x\_s = math.copysign(1.0, x)
      def code(x_s, x_m, y, z):
      	return x_s * -x_m
      
      x\_m = abs(x)
      x\_s = copysign(1.0, x)
      function code(x_s, x_m, y, z)
      	return Float64(x_s * Float64(-x_m))
      end
      
      x\_m = abs(x);
      x\_s = sign(x) * abs(1.0);
      function tmp = code(x_s, x_m, y, z)
      	tmp = x_s * -x_m;
      end
      
      x\_m = N[Abs[x], $MachinePrecision]
      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
      code[x$95$s_, x$95$m_, y_, z_] := N[(x$95$s * (-x$95$m)), $MachinePrecision]
      
      \begin{array}{l}
      x\_m = \left|x\right|
      \\
      x\_s = \mathsf{copysign}\left(1, x\right)
      
      \\
      x\_s \cdot \left(-x\_m\right)
      \end{array}
      
      Derivation
      1. Initial program 87.7%

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

        \[\leadsto \color{blue}{-1 \cdot x} \]
      4. Step-by-step derivation
        1. mul-1-negN/A

          \[\leadsto \color{blue}{\mathsf{neg}\left(x\right)} \]
        2. lower-neg.f6437.6

          \[\leadsto \color{blue}{-x} \]
      5. Applied rewrites37.6%

        \[\leadsto \color{blue}{-x} \]
      6. Add Preprocessing

      Developer Target 1: 99.5% accurate, 0.6× speedup?

      \[\begin{array}{l} \\ \begin{array}{l} t_0 := \left(1 + y\right) \cdot \frac{x}{z} - x\\ \mathbf{if}\;x < -2.71483106713436 \cdot 10^{-162}:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;x < 3.874108816439546 \cdot 10^{-197}:\\ \;\;\;\;\left(x \cdot \left(\left(y - z\right) + 1\right)\right) \cdot \frac{1}{z}\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \]
      (FPCore (x y z)
       :precision binary64
       (let* ((t_0 (- (* (+ 1.0 y) (/ x z)) x)))
         (if (< x -2.71483106713436e-162)
           t_0
           (if (< x 3.874108816439546e-197)
             (* (* x (+ (- y z) 1.0)) (/ 1.0 z))
             t_0))))
      double code(double x, double y, double z) {
      	double t_0 = ((1.0 + y) * (x / z)) - x;
      	double tmp;
      	if (x < -2.71483106713436e-162) {
      		tmp = t_0;
      	} else if (x < 3.874108816439546e-197) {
      		tmp = (x * ((y - z) + 1.0)) * (1.0 / z);
      	} else {
      		tmp = t_0;
      	}
      	return tmp;
      }
      
      real(8) function code(x, y, z)
          real(8), intent (in) :: x
          real(8), intent (in) :: y
          real(8), intent (in) :: z
          real(8) :: t_0
          real(8) :: tmp
          t_0 = ((1.0d0 + y) * (x / z)) - x
          if (x < (-2.71483106713436d-162)) then
              tmp = t_0
          else if (x < 3.874108816439546d-197) then
              tmp = (x * ((y - z) + 1.0d0)) * (1.0d0 / z)
          else
              tmp = t_0
          end if
          code = tmp
      end function
      
      public static double code(double x, double y, double z) {
      	double t_0 = ((1.0 + y) * (x / z)) - x;
      	double tmp;
      	if (x < -2.71483106713436e-162) {
      		tmp = t_0;
      	} else if (x < 3.874108816439546e-197) {
      		tmp = (x * ((y - z) + 1.0)) * (1.0 / z);
      	} else {
      		tmp = t_0;
      	}
      	return tmp;
      }
      
      def code(x, y, z):
      	t_0 = ((1.0 + y) * (x / z)) - x
      	tmp = 0
      	if x < -2.71483106713436e-162:
      		tmp = t_0
      	elif x < 3.874108816439546e-197:
      		tmp = (x * ((y - z) + 1.0)) * (1.0 / z)
      	else:
      		tmp = t_0
      	return tmp
      
      function code(x, y, z)
      	t_0 = Float64(Float64(Float64(1.0 + y) * Float64(x / z)) - x)
      	tmp = 0.0
      	if (x < -2.71483106713436e-162)
      		tmp = t_0;
      	elseif (x < 3.874108816439546e-197)
      		tmp = Float64(Float64(x * Float64(Float64(y - z) + 1.0)) * Float64(1.0 / z));
      	else
      		tmp = t_0;
      	end
      	return tmp
      end
      
      function tmp_2 = code(x, y, z)
      	t_0 = ((1.0 + y) * (x / z)) - x;
      	tmp = 0.0;
      	if (x < -2.71483106713436e-162)
      		tmp = t_0;
      	elseif (x < 3.874108816439546e-197)
      		tmp = (x * ((y - z) + 1.0)) * (1.0 / z);
      	else
      		tmp = t_0;
      	end
      	tmp_2 = tmp;
      end
      
      code[x_, y_, z_] := Block[{t$95$0 = N[(N[(N[(1.0 + y), $MachinePrecision] * N[(x / z), $MachinePrecision]), $MachinePrecision] - x), $MachinePrecision]}, If[Less[x, -2.71483106713436e-162], t$95$0, If[Less[x, 3.874108816439546e-197], N[(N[(x * N[(N[(y - z), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] * N[(1.0 / z), $MachinePrecision]), $MachinePrecision], t$95$0]]]
      
      \begin{array}{l}
      
      \\
      \begin{array}{l}
      t_0 := \left(1 + y\right) \cdot \frac{x}{z} - x\\
      \mathbf{if}\;x < -2.71483106713436 \cdot 10^{-162}:\\
      \;\;\;\;t\_0\\
      
      \mathbf{elif}\;x < 3.874108816439546 \cdot 10^{-197}:\\
      \;\;\;\;\left(x \cdot \left(\left(y - z\right) + 1\right)\right) \cdot \frac{1}{z}\\
      
      \mathbf{else}:\\
      \;\;\;\;t\_0\\
      
      
      \end{array}
      \end{array}
      

      Reproduce

      ?
      herbie shell --seed 2024285 
      (FPCore (x y z)
        :name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
        :precision binary64
      
        :alt
        (! :herbie-platform default (if (< x -67870776678359/25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (- (* (+ 1 y) (/ x z)) x) (if (< x 1937054408219773/50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x))))
      
        (/ (* x (+ (- y z) 1.0)) z))