peicewise-defined

Percentage Accurate: 76.6% → 77.3%
Time: 5.1s
Alternatives: 7
Speedup: 1.5×

Specification

?
\[p \geq -1.79 \cdot 10^{+308} \land p \leq 1.79 \cdot 10^{+308}\]
\[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
(FPCore (p)
  :precision binary64
  (- (+ p 1.0) (/ (pow (fmin p 0.0) 2.0) (- (fmin p 0.0) 1.0))))
double code(double p) {
	return (p + 1.0) - (pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0));
}
real(8) function code(p)
use fmin_fmax_functions
    real(8), intent (in) :: p
    code = (p + 1.0d0) - ((fmin(p, 0.0d0) ** 2.0d0) / (fmin(p, 0.0d0) - 1.0d0))
end function
public static double code(double p) {
	return (p + 1.0) - (Math.pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0));
}
def code(p):
	return (p + 1.0) - (math.pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0))
function code(p)
	return Float64(Float64(p + 1.0) - Float64((fmin(p, 0.0) ^ 2.0) / Float64(fmin(p, 0.0) - 1.0)))
end
function tmp = code(p)
	tmp = (p + 1.0) - ((min(p, 0.0) ^ 2.0) / (min(p, 0.0) - 1.0));
end
code[p_] := N[(N[(p + 1.0), $MachinePrecision] - N[(N[Power[N[Min[p, 0.0], $MachinePrecision], 2.0], $MachinePrecision] / N[(N[Min[p, 0.0], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}

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

\[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
(FPCore (p)
  :precision binary64
  (- (+ p 1.0) (/ (pow (fmin p 0.0) 2.0) (- (fmin p 0.0) 1.0))))
double code(double p) {
	return (p + 1.0) - (pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0));
}
real(8) function code(p)
use fmin_fmax_functions
    real(8), intent (in) :: p
    code = (p + 1.0d0) - ((fmin(p, 0.0d0) ** 2.0d0) / (fmin(p, 0.0d0) - 1.0d0))
end function
public static double code(double p) {
	return (p + 1.0) - (Math.pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0));
}
def code(p):
	return (p + 1.0) - (math.pow(fmin(p, 0.0), 2.0) / (fmin(p, 0.0) - 1.0))
function code(p)
	return Float64(Float64(p + 1.0) - Float64((fmin(p, 0.0) ^ 2.0) / Float64(fmin(p, 0.0) - 1.0)))
end
function tmp = code(p)
	tmp = (p + 1.0) - ((min(p, 0.0) ^ 2.0) / (min(p, 0.0) - 1.0));
end
code[p_] := N[(N[(p + 1.0), $MachinePrecision] - N[(N[Power[N[Min[p, 0.0], $MachinePrecision], 2.0], $MachinePrecision] / N[(N[Min[p, 0.0], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}

Alternative 1: 77.3% accurate, 1.4× speedup?

\[-\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1 - p\right) \]
(FPCore (p)
  :precision binary64
  (-
 (fma (fmin 0.0 p) (/ (fmin 0.0 p) (- (fmin 0.0 p) 1.0)) (- -1.0 p))))
double code(double p) {
	return -fma(fmin(0.0, p), (fmin(0.0, p) / (fmin(0.0, p) - 1.0)), (-1.0 - p));
}
function code(p)
	return Float64(-fma(fmin(0.0, p), Float64(fmin(0.0, p) / Float64(fmin(0.0, p) - 1.0)), Float64(-1.0 - p)))
end
code[p_] := (-N[(N[Min[0.0, p], $MachinePrecision] * N[(N[Min[0.0, p], $MachinePrecision] / N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision] + N[(-1.0 - p), $MachinePrecision]), $MachinePrecision])
-\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1 - p\right)
Derivation
  1. Initial program 76.6%

    \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
  2. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
    2. sub-negate-revN/A

      \[\leadsto \color{blue}{\mathsf{neg}\left(\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} - \left(p + 1\right)\right)\right)} \]
    3. lower-neg.f64N/A

      \[\leadsto \color{blue}{-\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} - \left(p + 1\right)\right)} \]
    4. sub-flipN/A

      \[\leadsto -\color{blue}{\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)\right)} \]
    5. lift-/.f64N/A

      \[\leadsto -\left(\color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} + \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)\right) \]
    6. lift-pow.f64N/A

      \[\leadsto -\left(\frac{\color{blue}{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)\right) \]
    7. unpow2N/A

      \[\leadsto -\left(\frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)\right) \]
    8. associate-/l*N/A

      \[\leadsto -\left(\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}} + \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)\right) \]
    9. lower-fma.f64N/A

      \[\leadsto -\color{blue}{\mathsf{fma}\left(\mathsf{min}\left(p, 0\right), \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right)} \]
    10. lift-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\color{blue}{\mathsf{min}\left(p, 0\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    11. fmin-swapN/A

      \[\leadsto -\mathsf{fma}\left(\color{blue}{\mathsf{min}\left(0, p\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    12. lower-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\color{blue}{\mathsf{min}\left(0, p\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    13. lower-/.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \color{blue}{\frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    14. lift-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(p, 0\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    15. fmin-swapN/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    16. lower-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    17. lift-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(p, 0\right)} - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    18. fmin-swapN/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    19. lower-fmin.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1}, \mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
    20. lift-+.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \mathsf{neg}\left(\color{blue}{\left(p + 1\right)}\right)\right) \]
    21. add-flipN/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \mathsf{neg}\left(\color{blue}{\left(p - \left(\mathsf{neg}\left(1\right)\right)\right)}\right)\right) \]
    22. sub-negate-revN/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \color{blue}{\left(\mathsf{neg}\left(1\right)\right) - p}\right) \]
    23. lower--.f64N/A

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \color{blue}{\left(\mathsf{neg}\left(1\right)\right) - p}\right) \]
    24. metadata-eval77.3%

      \[\leadsto -\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \color{blue}{-1} - p\right) \]
  3. Applied rewrites77.3%

    \[\leadsto \color{blue}{-\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1 - p\right)} \]
  4. Add Preprocessing

Alternative 2: 77.2% accurate, 1.5× speedup?

\[\mathsf{fma}\left(\frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}, \mathsf{min}\left(0, p\right), p\right) - -1 \]
(FPCore (p)
  :precision binary64
  (- (fma (/ (fmin 0.0 p) (- 1.0 (fmin 0.0 p))) (fmin 0.0 p) p) -1.0))
double code(double p) {
	return fma((fmin(0.0, p) / (1.0 - fmin(0.0, p))), fmin(0.0, p), p) - -1.0;
}
function code(p)
	return Float64(fma(Float64(fmin(0.0, p) / Float64(1.0 - fmin(0.0, p))), fmin(0.0, p), p) - -1.0)
end
code[p_] := N[(N[(N[(N[Min[0.0, p], $MachinePrecision] / N[(1.0 - N[Min[0.0, p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Min[0.0, p], $MachinePrecision] + p), $MachinePrecision] - -1.0), $MachinePrecision]
\mathsf{fma}\left(\frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}, \mathsf{min}\left(0, p\right), p\right) - -1
Derivation
  1. Initial program 76.6%

    \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
  2. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
    2. lift-/.f64N/A

      \[\leadsto \left(p + 1\right) - \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
    3. frac-2negN/A

      \[\leadsto \left(p + 1\right) - \color{blue}{\frac{\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
    4. sub-to-fractionN/A

      \[\leadsto \color{blue}{\frac{\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
    5. mult-flipN/A

      \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
    6. lower-*.f64N/A

      \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
  3. Applied rewrites76.6%

    \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
  4. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
    2. lift-fma.f64N/A

      \[\leadsto \color{blue}{\left(\left(p - -1\right) \cdot \left(1 - \mathsf{min}\left(0, p\right)\right) + \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right)} \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    3. *-commutativeN/A

      \[\leadsto \left(\color{blue}{\left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)} + \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    4. lift-*.f64N/A

      \[\leadsto \left(\color{blue}{\left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)} + \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    5. +-commutativeN/A

      \[\leadsto \color{blue}{\left(\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right) + \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right)} \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    6. lift-*.f64N/A

      \[\leadsto \left(\color{blue}{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)} + \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    7. lift-fma.f64N/A

      \[\leadsto \color{blue}{\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right)} \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1} \]
    8. lift-/.f64N/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \color{blue}{\frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
    9. frac-2negN/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \color{blue}{\frac{\mathsf{neg}\left(-1\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}} \]
    10. metadata-evalN/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \frac{\color{blue}{1}}{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)} \]
    11. lift--.f64N/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\color{blue}{\left(\mathsf{min}\left(0, p\right) - 1\right)}\right)} \]
    12. sub-negate-revN/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \frac{1}{\color{blue}{1 - \mathsf{min}\left(0, p\right)}} \]
    13. lift--.f64N/A

      \[\leadsto \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right) \cdot \frac{1}{\color{blue}{1 - \mathsf{min}\left(0, p\right)}} \]
    14. mult-flipN/A

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right), \left(1 - \mathsf{min}\left(0, p\right)\right) \cdot \left(p - -1\right)\right)}{1 - \mathsf{min}\left(0, p\right)}} \]
  5. Applied rewrites77.2%

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}, \mathsf{min}\left(0, p\right), p\right) - -1} \]
  6. Add Preprocessing

Alternative 3: 77.2% accurate, 1.5× speedup?

\[p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1\right) \]
(FPCore (p)
  :precision binary64
  (- p (fma (fmin 0.0 p) (/ (fmin 0.0 p) (- (fmin 0.0 p) 1.0)) -1.0)))
double code(double p) {
	return p - fma(fmin(0.0, p), (fmin(0.0, p) / (fmin(0.0, p) - 1.0)), -1.0);
}
function code(p)
	return Float64(p - fma(fmin(0.0, p), Float64(fmin(0.0, p) / Float64(fmin(0.0, p) - 1.0)), -1.0))
end
code[p_] := N[(p - N[(N[Min[0.0, p], $MachinePrecision] * N[(N[Min[0.0, p], $MachinePrecision] / N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]
p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1\right)
Derivation
  1. Initial program 76.6%

    \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
  2. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
    2. lift-+.f64N/A

      \[\leadsto \color{blue}{\left(p + 1\right)} - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
    3. associate--l+N/A

      \[\leadsto \color{blue}{p + \left(1 - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)} \]
    4. sub-negate-revN/A

      \[\leadsto p + \color{blue}{\left(\mathsf{neg}\left(\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} - 1\right)\right)\right)} \]
    5. sub-flip-reverseN/A

      \[\leadsto \color{blue}{p - \left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} - 1\right)} \]
    6. lower--.f64N/A

      \[\leadsto \color{blue}{p - \left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} - 1\right)} \]
    7. sub-flipN/A

      \[\leadsto p - \color{blue}{\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(1\right)\right)\right)} \]
    8. lift-/.f64N/A

      \[\leadsto p - \left(\color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} + \left(\mathsf{neg}\left(1\right)\right)\right) \]
    9. lift-pow.f64N/A

      \[\leadsto p - \left(\frac{\color{blue}{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(1\right)\right)\right) \]
    10. unpow2N/A

      \[\leadsto p - \left(\frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{min}\left(p, 0\right) - 1} + \left(\mathsf{neg}\left(1\right)\right)\right) \]
    11. associate-/l*N/A

      \[\leadsto p - \left(\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}} + \left(\mathsf{neg}\left(1\right)\right)\right) \]
    12. lower-fma.f64N/A

      \[\leadsto p - \color{blue}{\mathsf{fma}\left(\mathsf{min}\left(p, 0\right), \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right)} \]
    13. lift-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\color{blue}{\mathsf{min}\left(p, 0\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    14. fmin-swapN/A

      \[\leadsto p - \mathsf{fma}\left(\color{blue}{\mathsf{min}\left(0, p\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    15. lower-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\color{blue}{\mathsf{min}\left(0, p\right)}, \frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    16. lower-/.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \color{blue}{\frac{\mathsf{min}\left(p, 0\right)}{\mathsf{min}\left(p, 0\right) - 1}}, \mathsf{neg}\left(1\right)\right) \]
    17. lift-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(p, 0\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    18. fmin-swapN/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    19. lower-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{min}\left(p, 0\right) - 1}, \mathsf{neg}\left(1\right)\right) \]
    20. lift-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(p, 0\right)} - 1}, \mathsf{neg}\left(1\right)\right) \]
    21. fmin-swapN/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1}, \mathsf{neg}\left(1\right)\right) \]
    22. lower-fmin.f64N/A

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1}, \mathsf{neg}\left(1\right)\right) \]
    23. metadata-eval77.2%

      \[\leadsto p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, \color{blue}{-1}\right) \]
  3. Applied rewrites77.2%

    \[\leadsto \color{blue}{p - \mathsf{fma}\left(\mathsf{min}\left(0, p\right), \frac{\mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}, -1\right)} \]
  4. Add Preprocessing

Alternative 4: 74.8% accurate, 1.4× speedup?

\[\begin{array}{l} t_0 := \mathsf{min}\left(0, p\right) - 1\\ \mathbf{if}\;p \leq 600000000000:\\ \;\;\;\;\mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)} - -1\\ \mathbf{else}:\\ \;\;\;\;\frac{t\_0 \cdot p}{t\_0}\\ \end{array} \]
(FPCore (p)
  :precision binary64
  (let* ((t_0 (- (fmin 0.0 p) 1.0)))
  (if (<= p 600000000000.0)
    (-
     (* (fmin 0.0 0.0) (/ (fmin 0.0 0.0) (- 1.0 (fmin 0.0 0.0))))
     -1.0)
    (/ (* t_0 p) t_0))))
double code(double p) {
	double t_0 = fmin(0.0, p) - 1.0;
	double tmp;
	if (p <= 600000000000.0) {
		tmp = (fmin(0.0, 0.0) * (fmin(0.0, 0.0) / (1.0 - fmin(0.0, 0.0)))) - -1.0;
	} else {
		tmp = (t_0 * p) / t_0;
	}
	return tmp;
}
real(8) function code(p)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8) :: t_0
    real(8) :: tmp
    t_0 = fmin(0.0d0, p) - 1.0d0
    if (p <= 600000000000.0d0) then
        tmp = (fmin(0.0d0, 0.0d0) * (fmin(0.0d0, 0.0d0) / (1.0d0 - fmin(0.0d0, 0.0d0)))) - (-1.0d0)
    else
        tmp = (t_0 * p) / t_0
    end if
    code = tmp
end function
public static double code(double p) {
	double t_0 = fmin(0.0, p) - 1.0;
	double tmp;
	if (p <= 600000000000.0) {
		tmp = (fmin(0.0, 0.0) * (fmin(0.0, 0.0) / (1.0 - fmin(0.0, 0.0)))) - -1.0;
	} else {
		tmp = (t_0 * p) / t_0;
	}
	return tmp;
}
def code(p):
	t_0 = fmin(0.0, p) - 1.0
	tmp = 0
	if p <= 600000000000.0:
		tmp = (fmin(0.0, 0.0) * (fmin(0.0, 0.0) / (1.0 - fmin(0.0, 0.0)))) - -1.0
	else:
		tmp = (t_0 * p) / t_0
	return tmp
function code(p)
	t_0 = Float64(fmin(0.0, p) - 1.0)
	tmp = 0.0
	if (p <= 600000000000.0)
		tmp = Float64(Float64(fmin(0.0, 0.0) * Float64(fmin(0.0, 0.0) / Float64(1.0 - fmin(0.0, 0.0)))) - -1.0);
	else
		tmp = Float64(Float64(t_0 * p) / t_0);
	end
	return tmp
end
function tmp_2 = code(p)
	t_0 = min(0.0, p) - 1.0;
	tmp = 0.0;
	if (p <= 600000000000.0)
		tmp = (min(0.0, 0.0) * (min(0.0, 0.0) / (1.0 - min(0.0, 0.0)))) - -1.0;
	else
		tmp = (t_0 * p) / t_0;
	end
	tmp_2 = tmp;
end
code[p_] := Block[{t$95$0 = N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision]}, If[LessEqual[p, 600000000000.0], N[(N[(N[Min[0.0, 0.0], $MachinePrecision] * N[(N[Min[0.0, 0.0], $MachinePrecision] / N[(1.0 - N[Min[0.0, 0.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision], N[(N[(t$95$0 * p), $MachinePrecision] / t$95$0), $MachinePrecision]]]
\begin{array}{l}
t_0 := \mathsf{min}\left(0, p\right) - 1\\
\mathbf{if}\;p \leq 600000000000:\\
\;\;\;\;\mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)} - -1\\

\mathbf{else}:\\
\;\;\;\;\frac{t\_0 \cdot p}{t\_0}\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if p < 6e11

    1. Initial program 76.6%

      \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
    2. Step-by-step derivation
      1. lift--.f64N/A

        \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
      2. sub-flipN/A

        \[\leadsto \color{blue}{\left(p + 1\right) + \left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right)} \]
      3. +-commutativeN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) + \left(p + 1\right)} \]
      4. add-flipN/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)} \]
      5. lower--.f64N/A

        \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)} \]
      6. lift-/.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      7. distribute-neg-frac2N/A

        \[\leadsto \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      8. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      9. lift-pow.f64N/A

        \[\leadsto \frac{\color{blue}{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      10. unpow2N/A

        \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      11. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      12. lift-fmin.f64N/A

        \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      13. fmin-swapN/A

        \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, p\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      14. lower-fmin.f64N/A

        \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, p\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      15. lift-fmin.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      16. fmin-swapN/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      17. lower-fmin.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      18. lift--.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\mathsf{neg}\left(\color{blue}{\left(\mathsf{min}\left(p, 0\right) - 1\right)}\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      19. sub-negate-revN/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\color{blue}{1 - \mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      20. lower--.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\color{blue}{1 - \mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      21. lift-fmin.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      22. fmin-swapN/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(0, p\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      23. lower-fmin.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(0, p\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
      24. lift-+.f64N/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(\mathsf{neg}\left(\color{blue}{\left(p + 1\right)}\right)\right) \]
      25. add-flipN/A

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(\mathsf{neg}\left(\color{blue}{\left(p - \left(\mathsf{neg}\left(1\right)\right)\right)}\right)\right) \]
    3. Applied rewrites76.6%

      \[\leadsto \color{blue}{\frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(-1 - p\right)} \]
    4. Taylor expanded in p around 0

      \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \color{blue}{-1} \]
    5. Step-by-step derivation
      1. Applied rewrites51.9%

        \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \color{blue}{-1} \]
      2. Taylor expanded in undef-var around zero

        \[\leadsto \frac{\mathsf{min}\left(0, \color{blue}{0}\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - -1 \]
      3. Step-by-step derivation
        1. Applied rewrites52.3%

          \[\leadsto \frac{\mathsf{min}\left(0, \color{blue}{0}\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - -1 \]
        2. Taylor expanded in undef-var around zero

          \[\leadsto \frac{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, \color{blue}{0}\right)}{1 - \mathsf{min}\left(0, p\right)} - -1 \]
        3. Step-by-step derivation
          1. Applied rewrites52.3%

            \[\leadsto \frac{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, \color{blue}{0}\right)}{1 - \mathsf{min}\left(0, p\right)} - -1 \]
          2. Taylor expanded in undef-var around zero

            \[\leadsto \frac{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, \color{blue}{0}\right)} - -1 \]
          3. Step-by-step derivation
            1. Applied rewrites52.3%

              \[\leadsto \frac{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, \color{blue}{0}\right)} - -1 \]
            2. Step-by-step derivation
              1. lift-/.f64N/A

                \[\leadsto \color{blue}{\frac{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)}} - -1 \]
              2. lift-*.f64N/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, 0\right) \cdot \mathsf{min}\left(0, 0\right)}}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              3. associate-/l*N/A

                \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)}} - -1 \]
              4. lower-*.f64N/A

                \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)}} - -1 \]
              5. lift-fmin.f64N/A

                \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right)} \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              6. fmin-swapN/A

                \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right)} \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              7. lower-fmin.f64N/A

                \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right)} \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              8. lower-/.f6452.3%

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \color{blue}{\frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)}} - -1 \]
              9. lift-fmin.f64N/A

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\color{blue}{\mathsf{min}\left(0, 0\right)}}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              10. fmin-swapN/A

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\color{blue}{\mathsf{min}\left(0, 0\right)}}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              11. lower-fmin.f6452.3%

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\color{blue}{\mathsf{min}\left(0, 0\right)}}{1 - \mathsf{min}\left(0, 0\right)} - -1 \]
              12. lift-fmin.f64N/A

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \color{blue}{\mathsf{min}\left(0, 0\right)}} - -1 \]
              13. fmin-swapN/A

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \color{blue}{\mathsf{min}\left(0, 0\right)}} - -1 \]
              14. lower-fmin.f6452.3%

                \[\leadsto \mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \color{blue}{\mathsf{min}\left(0, 0\right)}} - -1 \]
            3. Applied rewrites52.3%

              \[\leadsto \color{blue}{\mathsf{min}\left(0, 0\right) \cdot \frac{\mathsf{min}\left(0, 0\right)}{1 - \mathsf{min}\left(0, 0\right)}} - -1 \]

            if 6e11 < p

            1. Initial program 76.6%

              \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
            2. Step-by-step derivation
              1. lift--.f64N/A

                \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              2. lift-/.f64N/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              3. frac-2negN/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              4. sub-to-fractionN/A

                \[\leadsto \color{blue}{\frac{\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              5. mult-flipN/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              6. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
            3. Applied rewrites76.6%

              \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
            4. Taylor expanded in p around inf

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            5. Step-by-step derivation
              1. lower-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. lower-/.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              3. lower-*.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              4. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, \color{blue}{p}\right) - 1} \]
              5. lower-fmin.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
              6. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - \color{blue}{1}} \]
              7. lower-fmin.f6426.5%

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
            6. Applied rewrites26.5%

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            7. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. lift-/.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              3. associate-*r/N/A

                \[\leadsto \frac{-1 \cdot \left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              4. mul-1-negN/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              5. lower-/.f64N/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              6. lift-*.f64N/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              7. *-commutativeN/A

                \[\leadsto \frac{\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right) \cdot p\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              8. distribute-lft-neg-inN/A

                \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              9. lift--.f64N/A

                \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\mathsf{min}\left(0, p\right) - 1} \]
              10. sub-negate-revN/A

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              11. lift--.f64N/A

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              12. lower-*.f6426.5%

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
            8. Applied rewrites26.5%

              \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
          4. Recombined 2 regimes into one program.
          5. Add Preprocessing

          Alternative 5: 74.5% accurate, 1.4× speedup?

          \[\begin{array}{l} t_0 := \mathsf{min}\left(0, p\right) - 1\\ \mathbf{if}\;p \leq 600000000000:\\ \;\;\;\;\mathsf{min}\left(0, p\right) \cdot \frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - -1\\ \mathbf{else}:\\ \;\;\;\;\frac{t\_0 \cdot p}{t\_0}\\ \end{array} \]
          (FPCore (p)
            :precision binary64
            (let* ((t_0 (- (fmin 0.0 p) 1.0)))
            (if (<= p 600000000000.0)
              (- (* (fmin 0.0 p) (/ (fmin 0.0 p) (- 1.0 (fmin 0.0 p)))) -1.0)
              (/ (* t_0 p) t_0))))
          double code(double p) {
          	double t_0 = fmin(0.0, p) - 1.0;
          	double tmp;
          	if (p <= 600000000000.0) {
          		tmp = (fmin(0.0, p) * (fmin(0.0, p) / (1.0 - fmin(0.0, p)))) - -1.0;
          	} else {
          		tmp = (t_0 * p) / t_0;
          	}
          	return tmp;
          }
          
          real(8) function code(p)
          use fmin_fmax_functions
              real(8), intent (in) :: p
              real(8) :: t_0
              real(8) :: tmp
              t_0 = fmin(0.0d0, p) - 1.0d0
              if (p <= 600000000000.0d0) then
                  tmp = (fmin(0.0d0, p) * (fmin(0.0d0, p) / (1.0d0 - fmin(0.0d0, p)))) - (-1.0d0)
              else
                  tmp = (t_0 * p) / t_0
              end if
              code = tmp
          end function
          
          public static double code(double p) {
          	double t_0 = fmin(0.0, p) - 1.0;
          	double tmp;
          	if (p <= 600000000000.0) {
          		tmp = (fmin(0.0, p) * (fmin(0.0, p) / (1.0 - fmin(0.0, p)))) - -1.0;
          	} else {
          		tmp = (t_0 * p) / t_0;
          	}
          	return tmp;
          }
          
          def code(p):
          	t_0 = fmin(0.0, p) - 1.0
          	tmp = 0
          	if p <= 600000000000.0:
          		tmp = (fmin(0.0, p) * (fmin(0.0, p) / (1.0 - fmin(0.0, p)))) - -1.0
          	else:
          		tmp = (t_0 * p) / t_0
          	return tmp
          
          function code(p)
          	t_0 = Float64(fmin(0.0, p) - 1.0)
          	tmp = 0.0
          	if (p <= 600000000000.0)
          		tmp = Float64(Float64(fmin(0.0, p) * Float64(fmin(0.0, p) / Float64(1.0 - fmin(0.0, p)))) - -1.0);
          	else
          		tmp = Float64(Float64(t_0 * p) / t_0);
          	end
          	return tmp
          end
          
          function tmp_2 = code(p)
          	t_0 = min(0.0, p) - 1.0;
          	tmp = 0.0;
          	if (p <= 600000000000.0)
          		tmp = (min(0.0, p) * (min(0.0, p) / (1.0 - min(0.0, p)))) - -1.0;
          	else
          		tmp = (t_0 * p) / t_0;
          	end
          	tmp_2 = tmp;
          end
          
          code[p_] := Block[{t$95$0 = N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision]}, If[LessEqual[p, 600000000000.0], N[(N[(N[Min[0.0, p], $MachinePrecision] * N[(N[Min[0.0, p], $MachinePrecision] / N[(1.0 - N[Min[0.0, p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - -1.0), $MachinePrecision], N[(N[(t$95$0 * p), $MachinePrecision] / t$95$0), $MachinePrecision]]]
          
          \begin{array}{l}
          t_0 := \mathsf{min}\left(0, p\right) - 1\\
          \mathbf{if}\;p \leq 600000000000:\\
          \;\;\;\;\mathsf{min}\left(0, p\right) \cdot \frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - -1\\
          
          \mathbf{else}:\\
          \;\;\;\;\frac{t\_0 \cdot p}{t\_0}\\
          
          
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if p < 6e11

            1. Initial program 76.6%

              \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
            2. Step-by-step derivation
              1. lift--.f64N/A

                \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              2. sub-flipN/A

                \[\leadsto \color{blue}{\left(p + 1\right) + \left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right)} \]
              3. +-commutativeN/A

                \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) + \left(p + 1\right)} \]
              4. add-flipN/A

                \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)} \]
              5. lower--.f64N/A

                \[\leadsto \color{blue}{\left(\mathsf{neg}\left(\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right)} \]
              6. lift-/.f64N/A

                \[\leadsto \left(\mathsf{neg}\left(\color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}}\right)\right) - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              7. distribute-neg-frac2N/A

                \[\leadsto \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              8. lower-/.f64N/A

                \[\leadsto \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              9. lift-pow.f64N/A

                \[\leadsto \frac{\color{blue}{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              10. unpow2N/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              11. lower-*.f64N/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right) \cdot \mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              12. lift-fmin.f64N/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(p, 0\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              13. fmin-swapN/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, p\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              14. lower-fmin.f64N/A

                \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, p\right)} \cdot \mathsf{min}\left(p, 0\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              15. lift-fmin.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(p, 0\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              16. fmin-swapN/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              17. lower-fmin.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \color{blue}{\mathsf{min}\left(0, p\right)}}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              18. lift--.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\mathsf{neg}\left(\color{blue}{\left(\mathsf{min}\left(p, 0\right) - 1\right)}\right)} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              19. sub-negate-revN/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\color{blue}{1 - \mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              20. lower--.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{\color{blue}{1 - \mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              21. lift-fmin.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(p, 0\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              22. fmin-swapN/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(0, p\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              23. lower-fmin.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \color{blue}{\mathsf{min}\left(0, p\right)}} - \left(\mathsf{neg}\left(\left(p + 1\right)\right)\right) \]
              24. lift-+.f64N/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(\mathsf{neg}\left(\color{blue}{\left(p + 1\right)}\right)\right) \]
              25. add-flipN/A

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(\mathsf{neg}\left(\color{blue}{\left(p - \left(\mathsf{neg}\left(1\right)\right)\right)}\right)\right) \]
            3. Applied rewrites76.6%

              \[\leadsto \color{blue}{\frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \left(-1 - p\right)} \]
            4. Taylor expanded in p around 0

              \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \color{blue}{-1} \]
            5. Step-by-step derivation
              1. Applied rewrites51.9%

                \[\leadsto \frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)} - \color{blue}{-1} \]
              2. Step-by-step derivation
                1. lift-/.f64N/A

                  \[\leadsto \color{blue}{\frac{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}} - -1 \]
                2. lift-*.f64N/A

                  \[\leadsto \frac{\color{blue}{\mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)}}{1 - \mathsf{min}\left(0, p\right)} - -1 \]
                3. associate-/l*N/A

                  \[\leadsto \color{blue}{\mathsf{min}\left(0, p\right) \cdot \frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}} - -1 \]
                4. lift-/.f64N/A

                  \[\leadsto \mathsf{min}\left(0, p\right) \cdot \color{blue}{\frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}} - -1 \]
                5. lower-*.f6451.9%

                  \[\leadsto \color{blue}{\mathsf{min}\left(0, p\right) \cdot \frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}} - -1 \]
              3. Applied rewrites51.9%

                \[\leadsto \color{blue}{\mathsf{min}\left(0, p\right) \cdot \frac{\mathsf{min}\left(0, p\right)}{1 - \mathsf{min}\left(0, p\right)}} - -1 \]

              if 6e11 < p

              1. Initial program 76.6%

                \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
              2. Step-by-step derivation
                1. lift--.f64N/A

                  \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
                2. lift-/.f64N/A

                  \[\leadsto \left(p + 1\right) - \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
                3. frac-2negN/A

                  \[\leadsto \left(p + 1\right) - \color{blue}{\frac{\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
                4. sub-to-fractionN/A

                  \[\leadsto \color{blue}{\frac{\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
                5. mult-flipN/A

                  \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
                6. lower-*.f64N/A

                  \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              3. Applied rewrites76.6%

                \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
              4. Taylor expanded in p around inf

                \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              5. Step-by-step derivation
                1. lower-*.f64N/A

                  \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
                2. lower-/.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
                3. lower-*.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
                4. lower--.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, \color{blue}{p}\right) - 1} \]
                5. lower-fmin.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
                6. lower--.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - \color{blue}{1}} \]
                7. lower-fmin.f6426.5%

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
              6. Applied rewrites26.5%

                \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              7. Step-by-step derivation
                1. lift-*.f64N/A

                  \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
                2. lift-/.f64N/A

                  \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
                3. associate-*r/N/A

                  \[\leadsto \frac{-1 \cdot \left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
                4. mul-1-negN/A

                  \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
                5. lower-/.f64N/A

                  \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
                6. lift-*.f64N/A

                  \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
                7. *-commutativeN/A

                  \[\leadsto \frac{\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right) \cdot p\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
                8. distribute-lft-neg-inN/A

                  \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
                9. lift--.f64N/A

                  \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\mathsf{min}\left(0, p\right) - 1} \]
                10. sub-negate-revN/A

                  \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
                11. lift--.f64N/A

                  \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
                12. lower-*.f6426.5%

                  \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              8. Applied rewrites26.5%

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
            6. Recombined 2 regimes into one program.
            7. Add Preprocessing

            Alternative 6: 26.5% accurate, 1.8× speedup?

            \[\left(-p\right) \cdot \frac{\mathsf{min}\left(0, p\right) - 1}{1 - \mathsf{min}\left(0, p\right)} \]
            (FPCore (p)
              :precision binary64
              (* (- p) (/ (- (fmin 0.0 p) 1.0) (- 1.0 (fmin 0.0 p)))))
            double code(double p) {
            	return -p * ((fmin(0.0, p) - 1.0) / (1.0 - fmin(0.0, p)));
            }
            
            real(8) function code(p)
            use fmin_fmax_functions
                real(8), intent (in) :: p
                code = -p * ((fmin(0.0d0, p) - 1.0d0) / (1.0d0 - fmin(0.0d0, p)))
            end function
            
            public static double code(double p) {
            	return -p * ((fmin(0.0, p) - 1.0) / (1.0 - fmin(0.0, p)));
            }
            
            def code(p):
            	return -p * ((fmin(0.0, p) - 1.0) / (1.0 - fmin(0.0, p)))
            
            function code(p)
            	return Float64(Float64(-p) * Float64(Float64(fmin(0.0, p) - 1.0) / Float64(1.0 - fmin(0.0, p))))
            end
            
            function tmp = code(p)
            	tmp = -p * ((min(0.0, p) - 1.0) / (1.0 - min(0.0, p)));
            end
            
            code[p_] := N[((-p) * N[(N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision] / N[(1.0 - N[Min[0.0, p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
            
            \left(-p\right) \cdot \frac{\mathsf{min}\left(0, p\right) - 1}{1 - \mathsf{min}\left(0, p\right)}
            
            Derivation
            1. Initial program 76.6%

              \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
            2. Step-by-step derivation
              1. lift--.f64N/A

                \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              2. lift-/.f64N/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              3. frac-2negN/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              4. sub-to-fractionN/A

                \[\leadsto \color{blue}{\frac{\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              5. mult-flipN/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              6. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
            3. Applied rewrites76.6%

              \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
            4. Taylor expanded in p around inf

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            5. Step-by-step derivation
              1. lower-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. lower-/.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              3. lower-*.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              4. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, \color{blue}{p}\right) - 1} \]
              5. lower-fmin.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
              6. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - \color{blue}{1}} \]
              7. lower-fmin.f6426.5%

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
            6. Applied rewrites26.5%

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            7. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. mul-1-negN/A

                \[\leadsto \mathsf{neg}\left(\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}\right) \]
              3. lift-/.f64N/A

                \[\leadsto \mathsf{neg}\left(\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}\right) \]
              4. lift-*.f64N/A

                \[\leadsto \mathsf{neg}\left(\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}\right) \]
              5. associate-/l*N/A

                \[\leadsto \mathsf{neg}\left(p \cdot \frac{1 - \mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}\right) \]
              6. distribute-lft-neg-inN/A

                \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\frac{1 - \mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              7. lower-*.f64N/A

                \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\frac{1 - \mathsf{min}\left(0, p\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              8. lower-neg.f64N/A

                \[\leadsto \left(-p\right) \cdot \frac{\color{blue}{1 - \mathsf{min}\left(0, p\right)}}{\mathsf{min}\left(0, p\right) - 1} \]
              9. lift--.f64N/A

                \[\leadsto \left(-p\right) \cdot \frac{1 - \mathsf{min}\left(0, p\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              10. sub-negate-revN/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              11. lift--.f64N/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              12. lift--.f64N/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}{\mathsf{min}\left(0, p\right) - \color{blue}{1}} \]
              13. sub-negate-revN/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}{\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)} \]
              14. lift--.f64N/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{neg}\left(\left(\mathsf{min}\left(0, p\right) - 1\right)\right)}{\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)} \]
              15. frac-2neg-revN/A

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{min}\left(0, p\right) - 1}{\color{blue}{1 - \mathsf{min}\left(0, p\right)}} \]
              16. lower-/.f6426.5%

                \[\leadsto \left(-p\right) \cdot \frac{\mathsf{min}\left(0, p\right) - 1}{\color{blue}{1 - \mathsf{min}\left(0, p\right)}} \]
            8. Applied rewrites26.5%

              \[\leadsto \left(-p\right) \cdot \color{blue}{\frac{\mathsf{min}\left(0, p\right) - 1}{1 - \mathsf{min}\left(0, p\right)}} \]
            9. Add Preprocessing

            Alternative 7: 26.5% accurate, 1.9× speedup?

            \[\begin{array}{l} t_0 := \mathsf{min}\left(0, p\right) - 1\\ \frac{t\_0 \cdot p}{t\_0} \end{array} \]
            (FPCore (p)
              :precision binary64
              (let* ((t_0 (- (fmin 0.0 p) 1.0))) (/ (* t_0 p) t_0)))
            double code(double p) {
            	double t_0 = fmin(0.0, p) - 1.0;
            	return (t_0 * p) / t_0;
            }
            
            real(8) function code(p)
            use fmin_fmax_functions
                real(8), intent (in) :: p
                real(8) :: t_0
                t_0 = fmin(0.0d0, p) - 1.0d0
                code = (t_0 * p) / t_0
            end function
            
            public static double code(double p) {
            	double t_0 = fmin(0.0, p) - 1.0;
            	return (t_0 * p) / t_0;
            }
            
            def code(p):
            	t_0 = fmin(0.0, p) - 1.0
            	return (t_0 * p) / t_0
            
            function code(p)
            	t_0 = Float64(fmin(0.0, p) - 1.0)
            	return Float64(Float64(t_0 * p) / t_0)
            end
            
            function tmp = code(p)
            	t_0 = min(0.0, p) - 1.0;
            	tmp = (t_0 * p) / t_0;
            end
            
            code[p_] := Block[{t$95$0 = N[(N[Min[0.0, p], $MachinePrecision] - 1.0), $MachinePrecision]}, N[(N[(t$95$0 * p), $MachinePrecision] / t$95$0), $MachinePrecision]]
            
            \begin{array}{l}
            t_0 := \mathsf{min}\left(0, p\right) - 1\\
            \frac{t\_0 \cdot p}{t\_0}
            \end{array}
            
            Derivation
            1. Initial program 76.6%

              \[\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1} \]
            2. Step-by-step derivation
              1. lift--.f64N/A

                \[\leadsto \color{blue}{\left(p + 1\right) - \frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              2. lift-/.f64N/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{{\left(\mathsf{min}\left(p, 0\right)\right)}^{2}}{\mathsf{min}\left(p, 0\right) - 1}} \]
              3. frac-2negN/A

                \[\leadsto \left(p + 1\right) - \color{blue}{\frac{\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              4. sub-to-fractionN/A

                \[\leadsto \color{blue}{\frac{\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              5. mult-flipN/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
              6. lower-*.f64N/A

                \[\leadsto \color{blue}{\left(\left(p + 1\right) \cdot \left(\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)\right) - \left(\mathsf{neg}\left({\left(\mathsf{min}\left(p, 0\right)\right)}^{2}\right)\right)\right) \cdot \frac{1}{\mathsf{neg}\left(\left(\mathsf{min}\left(p, 0\right) - 1\right)\right)}} \]
            3. Applied rewrites76.6%

              \[\leadsto \color{blue}{\mathsf{fma}\left(p - -1, 1 - \mathsf{min}\left(0, p\right), \mathsf{min}\left(0, p\right) \cdot \mathsf{min}\left(0, p\right)\right) \cdot \frac{-1}{\mathsf{min}\left(0, p\right) - 1}} \]
            4. Taylor expanded in p around inf

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            5. Step-by-step derivation
              1. lower-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. lower-/.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              3. lower-*.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              4. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, \color{blue}{p}\right) - 1} \]
              5. lower-fmin.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
              6. lower--.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - \color{blue}{1}} \]
              7. lower-fmin.f6426.5%

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1} \]
            6. Applied rewrites26.5%

              \[\leadsto \color{blue}{-1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
            7. Step-by-step derivation
              1. lift-*.f64N/A

                \[\leadsto -1 \cdot \color{blue}{\frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\mathsf{min}\left(0, p\right) - 1}} \]
              2. lift-/.f64N/A

                \[\leadsto -1 \cdot \frac{p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              3. associate-*r/N/A

                \[\leadsto \frac{-1 \cdot \left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              4. mul-1-negN/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              5. lower-/.f64N/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
              6. lift-*.f64N/A

                \[\leadsto \frac{\mathsf{neg}\left(p \cdot \left(1 - \mathsf{min}\left(0, p\right)\right)\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              7. *-commutativeN/A

                \[\leadsto \frac{\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right) \cdot p\right)}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              8. distribute-lft-neg-inN/A

                \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
              9. lift--.f64N/A

                \[\leadsto \frac{\left(\mathsf{neg}\left(\left(1 - \mathsf{min}\left(0, p\right)\right)\right)\right) \cdot p}{\mathsf{min}\left(0, p\right) - 1} \]
              10. sub-negate-revN/A

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              11. lift--.f64N/A

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\mathsf{min}\left(\color{blue}{0}, p\right) - 1} \]
              12. lower-*.f6426.5%

                \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right)} - 1} \]
            8. Applied rewrites26.5%

              \[\leadsto \frac{\left(\mathsf{min}\left(0, p\right) - 1\right) \cdot p}{\color{blue}{\mathsf{min}\left(0, p\right) - 1}} \]
            9. Add Preprocessing

            Developer Target 1: 52.7% accurate, 1.5× speedup?

            \[\begin{array}{l} \mathbf{if}\;p \geq -1 \cdot 10^{-6} \land p \leq 0:\\ \;\;\;\;\left(p + 1\right) - \frac{p \cdot p}{p - 1}\\ \mathbf{else}:\\ \;\;\;\;p - \mathsf{fma}\left(\frac{p}{p - 1}, p, -1\right)\\ \end{array} \]
            (FPCore (p)
              :precision binary64
              (if (and (>= p -1e-6) (<= p 0.0))
              (- (+ p 1.0) (/ (* p p) (- p 1.0)))
              (- p (fma (/ p (- p 1.0)) p -1.0))))
            double code(double p) {
            	double tmp;
            	if ((p >= -1e-6) && (p <= 0.0)) {
            		tmp = (p + 1.0) - ((p * p) / (p - 1.0));
            	} else {
            		tmp = p - fma((p / (p - 1.0)), p, -1.0);
            	}
            	return tmp;
            }
            
            function code(p)
            	tmp = 0.0
            	if ((p >= -1e-6) && (p <= 0.0))
            		tmp = Float64(Float64(p + 1.0) - Float64(Float64(p * p) / Float64(p - 1.0)));
            	else
            		tmp = Float64(p - fma(Float64(p / Float64(p - 1.0)), p, -1.0));
            	end
            	return tmp
            end
            
            code[p_] := If[And[GreaterEqual[p, -1e-6], LessEqual[p, 0.0]], N[(N[(p + 1.0), $MachinePrecision] - N[(N[(p * p), $MachinePrecision] / N[(p - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(p - N[(N[(p / N[(p - 1.0), $MachinePrecision]), $MachinePrecision] * p + -1.0), $MachinePrecision]), $MachinePrecision]]
            
            \begin{array}{l}
            \mathbf{if}\;p \geq -1 \cdot 10^{-6} \land p \leq 0:\\
            \;\;\;\;\left(p + 1\right) - \frac{p \cdot p}{p - 1}\\
            
            \mathbf{else}:\\
            \;\;\;\;p - \mathsf{fma}\left(\frac{p}{p - 1}, p, -1\right)\\
            
            
            \end{array}
            

            Reproduce

            ?
            herbie shell --seed 2025326 
            (FPCore (p)
              :name "peicewise-defined"
              :precision binary64
              :pre (and (>= p -1.79e+308) (<= p 1.79e+308))
            
              :alt
              (if (and (>= p -1/1000000) (<= p 0)) (- (+ p 1) (/ (* p p) (- p 1))) (- p (fma (/ p (- p 1)) p -1)))
            
              (- (+ p 1.0) (/ (pow (fmin p 0.0) 2.0) (- (fmin p 0.0) 1.0))))