
(FPCore (x y)
:precision binary64
(let* ((t_0 (sqrt (+ (pow (- y 0.275) 2.0) (pow (- x 0.275) 2.0)))))
(fmin
(fmin
(fmin
(fmin
(fmax (fmax (fmax (- y 0.55) (- y)) (- x 0.825)) (- 0.725 x))
(- (sqrt (+ (pow (- y 0.7) 2.0) (pow (- x 0.775) 2.0))) 0.075))
(fmax (fmax (fmax (- y) (- y 0.275)) (- x 0.55)) (- 0.45 x)))
(fmax (fmax (fmax (- y) (- y 1.0)) (- x 0.1)) (- x)))
(fmax
(fmax
(fmax (fmax (fmax (- y 0.55) (- x 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_0))
(- t_0 0.275)))))double code(double x, double y) {
double t_0 = sqrt((pow((y - 0.275), 2.0) + pow((x - 0.275), 2.0)));
return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (sqrt((pow((y - 0.7), 2.0) + pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
real(8) function code(x, y)
use fmin_fmax_functions
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8) :: t_0
t_0 = sqrt((((y - 0.275d0) ** 2.0d0) + ((x - 0.275d0) ** 2.0d0)))
code = fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55d0), -y), (x - 0.825d0)), (0.725d0 - x)), (sqrt((((y - 0.7d0) ** 2.0d0) + ((x - 0.775d0) ** 2.0d0))) - 0.075d0)), fmax(fmax(fmax(-y, (y - 0.275d0)), (x - 0.55d0)), (0.45d0 - x))), fmax(fmax(fmax(-y, (y - 1.0d0)), (x - 0.1d0)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55d0), (x - 0.55d0)), -x), (0.275d0 - y)), (0.175d0 - t_0)), (t_0 - 0.275d0)))
end function
public static double code(double x, double y) {
double t_0 = Math.sqrt((Math.pow((y - 0.275), 2.0) + Math.pow((x - 0.275), 2.0)));
return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (Math.sqrt((Math.pow((y - 0.7), 2.0) + Math.pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
def code(x, y): t_0 = math.sqrt((math.pow((y - 0.275), 2.0) + math.pow((x - 0.275), 2.0))) return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (math.sqrt((math.pow((y - 0.7), 2.0) + math.pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)))
function code(x, y) t_0 = sqrt(Float64((Float64(y - 0.275) ^ 2.0) + (Float64(x - 0.275) ^ 2.0))) return fmin(fmin(fmin(fmin(fmax(fmax(fmax(Float64(y - 0.55), Float64(-y)), Float64(x - 0.825)), Float64(0.725 - x)), Float64(sqrt(Float64((Float64(y - 0.7) ^ 2.0) + (Float64(x - 0.775) ^ 2.0))) - 0.075)), fmax(fmax(fmax(Float64(-y), Float64(y - 0.275)), Float64(x - 0.55)), Float64(0.45 - x))), fmax(fmax(fmax(Float64(-y), Float64(y - 1.0)), Float64(x - 0.1)), Float64(-x))), fmax(fmax(fmax(fmax(fmax(Float64(y - 0.55), Float64(x - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_0)), Float64(t_0 - 0.275))) end
function tmp = code(x, y) t_0 = sqrt((((y - 0.275) ^ 2.0) + ((x - 0.275) ^ 2.0))); tmp = min(min(min(min(max(max(max((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (sqrt((((y - 0.7) ^ 2.0) + ((x - 0.775) ^ 2.0))) - 0.075)), max(max(max(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), max(max(max(-y, (y - 1.0)), (x - 0.1)), -x)), max(max(max(max(max((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275))); end
code[x_, y_] := Block[{t$95$0 = N[Sqrt[N[(N[Power[N[(y - 0.275), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(x - 0.275), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, N[Min[N[Min[N[Min[N[Min[N[Max[N[Max[N[Max[N[(y - 0.55), $MachinePrecision], (-y)], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision], N[(N[Sqrt[N[(N[Power[N[(y - 0.7), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(x - 0.775), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 0.275), $MachinePrecision]], $MachinePrecision], N[(x - 0.55), $MachinePrecision]], $MachinePrecision], N[(0.45 - x), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 1.0), $MachinePrecision]], $MachinePrecision], N[(x - 0.1), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[N[(y - 0.55), $MachinePrecision], N[(x - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$0), $MachinePrecision]], $MachinePrecision], N[(t$95$0 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_0 := \sqrt{{\left(y - 0.275\right)}^{2} + {\left(x - 0.275\right)}^{2}}\\
\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(y - 0.55, -y\right), x - 0.825\right), 0.725 - x\right), \sqrt{{\left(y - 0.7\right)}^{2} + {\left(x - 0.775\right)}^{2}} - 0.075\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.275\right), x - 0.55\right), 0.45 - x\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 1\right), x - 0.1\right), -x\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(y - 0.55, x - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_0\right), t\_0 - 0.275\right)\right)
\end{array}
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y)
:precision binary64
(let* ((t_0 (sqrt (+ (pow (- y 0.275) 2.0) (pow (- x 0.275) 2.0)))))
(fmin
(fmin
(fmin
(fmin
(fmax (fmax (fmax (- y 0.55) (- y)) (- x 0.825)) (- 0.725 x))
(- (sqrt (+ (pow (- y 0.7) 2.0) (pow (- x 0.775) 2.0))) 0.075))
(fmax (fmax (fmax (- y) (- y 0.275)) (- x 0.55)) (- 0.45 x)))
(fmax (fmax (fmax (- y) (- y 1.0)) (- x 0.1)) (- x)))
(fmax
(fmax
(fmax (fmax (fmax (- y 0.55) (- x 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_0))
(- t_0 0.275)))))double code(double x, double y) {
double t_0 = sqrt((pow((y - 0.275), 2.0) + pow((x - 0.275), 2.0)));
return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (sqrt((pow((y - 0.7), 2.0) + pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
real(8) function code(x, y)
use fmin_fmax_functions
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8) :: t_0
t_0 = sqrt((((y - 0.275d0) ** 2.0d0) + ((x - 0.275d0) ** 2.0d0)))
code = fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55d0), -y), (x - 0.825d0)), (0.725d0 - x)), (sqrt((((y - 0.7d0) ** 2.0d0) + ((x - 0.775d0) ** 2.0d0))) - 0.075d0)), fmax(fmax(fmax(-y, (y - 0.275d0)), (x - 0.55d0)), (0.45d0 - x))), fmax(fmax(fmax(-y, (y - 1.0d0)), (x - 0.1d0)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55d0), (x - 0.55d0)), -x), (0.275d0 - y)), (0.175d0 - t_0)), (t_0 - 0.275d0)))
end function
public static double code(double x, double y) {
double t_0 = Math.sqrt((Math.pow((y - 0.275), 2.0) + Math.pow((x - 0.275), 2.0)));
return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (Math.sqrt((Math.pow((y - 0.7), 2.0) + Math.pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
def code(x, y): t_0 = math.sqrt((math.pow((y - 0.275), 2.0) + math.pow((x - 0.275), 2.0))) return fmin(fmin(fmin(fmin(fmax(fmax(fmax((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (math.sqrt((math.pow((y - 0.7), 2.0) + math.pow((x - 0.775), 2.0))) - 0.075)), fmax(fmax(fmax(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), fmax(fmax(fmax(-y, (y - 1.0)), (x - 0.1)), -x)), fmax(fmax(fmax(fmax(fmax((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)))
function code(x, y) t_0 = sqrt(Float64((Float64(y - 0.275) ^ 2.0) + (Float64(x - 0.275) ^ 2.0))) return fmin(fmin(fmin(fmin(fmax(fmax(fmax(Float64(y - 0.55), Float64(-y)), Float64(x - 0.825)), Float64(0.725 - x)), Float64(sqrt(Float64((Float64(y - 0.7) ^ 2.0) + (Float64(x - 0.775) ^ 2.0))) - 0.075)), fmax(fmax(fmax(Float64(-y), Float64(y - 0.275)), Float64(x - 0.55)), Float64(0.45 - x))), fmax(fmax(fmax(Float64(-y), Float64(y - 1.0)), Float64(x - 0.1)), Float64(-x))), fmax(fmax(fmax(fmax(fmax(Float64(y - 0.55), Float64(x - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_0)), Float64(t_0 - 0.275))) end
function tmp = code(x, y) t_0 = sqrt((((y - 0.275) ^ 2.0) + ((x - 0.275) ^ 2.0))); tmp = min(min(min(min(max(max(max((y - 0.55), -y), (x - 0.825)), (0.725 - x)), (sqrt((((y - 0.7) ^ 2.0) + ((x - 0.775) ^ 2.0))) - 0.075)), max(max(max(-y, (y - 0.275)), (x - 0.55)), (0.45 - x))), max(max(max(-y, (y - 1.0)), (x - 0.1)), -x)), max(max(max(max(max((y - 0.55), (x - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275))); end
code[x_, y_] := Block[{t$95$0 = N[Sqrt[N[(N[Power[N[(y - 0.275), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(x - 0.275), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, N[Min[N[Min[N[Min[N[Min[N[Max[N[Max[N[Max[N[(y - 0.55), $MachinePrecision], (-y)], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision], N[(N[Sqrt[N[(N[Power[N[(y - 0.7), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(x - 0.775), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 0.275), $MachinePrecision]], $MachinePrecision], N[(x - 0.55), $MachinePrecision]], $MachinePrecision], N[(0.45 - x), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 1.0), $MachinePrecision]], $MachinePrecision], N[(x - 0.1), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[N[(y - 0.55), $MachinePrecision], N[(x - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$0), $MachinePrecision]], $MachinePrecision], N[(t$95$0 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_0 := \sqrt{{\left(y - 0.275\right)}^{2} + {\left(x - 0.275\right)}^{2}}\\
\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(y - 0.55, -y\right), x - 0.825\right), 0.725 - x\right), \sqrt{{\left(y - 0.7\right)}^{2} + {\left(x - 0.775\right)}^{2}} - 0.075\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.275\right), x - 0.55\right), 0.45 - x\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 1\right), x - 0.1\right), -x\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(y - 0.55, x - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_0\right), t\_0 - 0.275\right)\right)
\end{array}
(FPCore (x y)
:precision binary64
(let* ((t_0 (sqrt (fma x (- x 0.55) 0.15125))))
(fmin
(fmin
(fmin
(fmin
(-
(sqrt (fma x (- x 1.55) (fma (- 0.7 y) (- 0.7 y) 0.600625)))
0.075)
(fmax (fmax (fmax (- y) (- y 0.55)) (- x 0.825)) (- 0.725 x)))
(fmax (- 0.45 x) (fmax (- x 0.55) (fmax (- y 0.275) (- y)))))
(fmax (- x) (fmax (- x 0.1) (fmax (- y 1.0) (- y)))))
(fmax
(fmax
(fmax (fmax (fmax (- x 0.55) (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_0))
(- t_0 0.275)))))double code(double x, double y) {
double t_0 = sqrt(fma(x, (x - 0.55), 0.15125));
return fmin(fmin(fmin(fmin((sqrt(fma(x, (x - 1.55), fma((0.7 - y), (0.7 - y), 0.600625))) - 0.075), fmax(fmax(fmax(-y, (y - 0.55)), (x - 0.825)), (0.725 - x))), fmax((0.45 - x), fmax((x - 0.55), fmax((y - 0.275), -y)))), fmax(-x, fmax((x - 0.1), fmax((y - 1.0), -y)))), fmax(fmax(fmax(fmax(fmax((x - 0.55), (y - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
function code(x, y) t_0 = sqrt(fma(x, Float64(x - 0.55), 0.15125)) return fmin(fmin(fmin(fmin(Float64(sqrt(fma(x, Float64(x - 1.55), fma(Float64(0.7 - y), Float64(0.7 - y), 0.600625))) - 0.075), fmax(fmax(fmax(Float64(-y), Float64(y - 0.55)), Float64(x - 0.825)), Float64(0.725 - x))), fmax(Float64(0.45 - x), fmax(Float64(x - 0.55), fmax(Float64(y - 0.275), Float64(-y))))), fmax(Float64(-x), fmax(Float64(x - 0.1), fmax(Float64(y - 1.0), Float64(-y))))), fmax(fmax(fmax(fmax(fmax(Float64(x - 0.55), Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_0)), Float64(t_0 - 0.275))) end
code[x_, y_] := Block[{t$95$0 = N[Sqrt[N[(x * N[(x - 0.55), $MachinePrecision] + 0.15125), $MachinePrecision]], $MachinePrecision]}, N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(x * N[(x - 1.55), $MachinePrecision] + N[(N[(0.7 - y), $MachinePrecision] * N[(0.7 - y), $MachinePrecision] + 0.600625), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 0.55), $MachinePrecision]], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[N[(x - 0.55), $MachinePrecision], N[Max[N[(y - 0.275), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[(-x), N[Max[N[(x - 0.1), $MachinePrecision], N[Max[N[(y - 1.0), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[N[(x - 0.55), $MachinePrecision], N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$0), $MachinePrecision]], $MachinePrecision], N[(t$95$0 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_0 := \sqrt{\mathsf{fma}\left(x, x - 0.55, 0.15125\right)}\\
\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(x, x - 1.55, \mathsf{fma}\left(0.7 - y, 0.7 - y, 0.600625\right)\right)} - 0.075, \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.55\right), x - 0.825\right), 0.725 - x\right)\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(x - 0.55, \mathsf{max}\left(y - 0.275, -y\right)\right)\right)\right), \mathsf{max}\left(-x, \mathsf{max}\left(x - 0.1, \mathsf{max}\left(y - 1, -y\right)\right)\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(x - 0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_0\right), t\_0 - 0.275\right)\right)
\end{array}
Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
sub-flipN/A
associate-+l+N/A
lower-fma.f64N/A
distribute-lft-neg-outN/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
+-commutativeN/A
Applied rewrites99.8%
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
(FPCore (x y)
:precision binary64
(let* ((t_0 (fmax (- y 0.275) (- y)))
(t_1
(fmax (fmax (fmax (- y) (- y 0.55)) (- x 0.825)) (- 0.725 x)))
(t_2 (sqrt (fma x (- x 0.55) 0.15125)))
(t_3 (fmax (- x) (fmax (- x 0.1) (fmax (- y 1.0) (- y)))))
(t_4 (sqrt (fma x -0.55 0.15125))))
(if (<= x 0.0042)
(fmin
(fmin
(fmin
(fmin
(-
(sqrt (fma x (- x 1.55) (fma (- 0.7 y) (- 0.7 y) 0.600625)))
0.075)
t_1)
(fmax (- 0.45 x) (fmax -0.55 t_0)))
t_3)
(fmax
(fmax
(fmax (fmax (fmax -0.55 (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_4))
(- t_4 0.275)))
(fmin
(fmin
(fmin
(fmin (- (sqrt (fma -1.4 y (fma x x 1.090625))) 0.075) t_1)
(fmax (- 0.45 x) (fmax (- x 0.55) t_0)))
t_3)
(fmax
(fmax
(fmax (fmax (fmax (- x 0.55) (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_2))
(- t_2 0.275))))))double code(double x, double y) {
double t_0 = fmax((y - 0.275), -y);
double t_1 = fmax(fmax(fmax(-y, (y - 0.55)), (x - 0.825)), (0.725 - x));
double t_2 = sqrt(fma(x, (x - 0.55), 0.15125));
double t_3 = fmax(-x, fmax((x - 0.1), fmax((y - 1.0), -y)));
double t_4 = sqrt(fma(x, -0.55, 0.15125));
double tmp;
if (x <= 0.0042) {
tmp = fmin(fmin(fmin(fmin((sqrt(fma(x, (x - 1.55), fma((0.7 - y), (0.7 - y), 0.600625))) - 0.075), t_1), fmax((0.45 - x), fmax(-0.55, t_0))), t_3), fmax(fmax(fmax(fmax(fmax(-0.55, (y - 0.55)), -x), (0.275 - y)), (0.175 - t_4)), (t_4 - 0.275)));
} else {
tmp = fmin(fmin(fmin(fmin((sqrt(fma(-1.4, y, fma(x, x, 1.090625))) - 0.075), t_1), fmax((0.45 - x), fmax((x - 0.55), t_0))), t_3), fmax(fmax(fmax(fmax(fmax((x - 0.55), (y - 0.55)), -x), (0.275 - y)), (0.175 - t_2)), (t_2 - 0.275)));
}
return tmp;
}
function code(x, y) t_0 = fmax(Float64(y - 0.275), Float64(-y)) t_1 = fmax(fmax(fmax(Float64(-y), Float64(y - 0.55)), Float64(x - 0.825)), Float64(0.725 - x)) t_2 = sqrt(fma(x, Float64(x - 0.55), 0.15125)) t_3 = fmax(Float64(-x), fmax(Float64(x - 0.1), fmax(Float64(y - 1.0), Float64(-y)))) t_4 = sqrt(fma(x, -0.55, 0.15125)) tmp = 0.0 if (x <= 0.0042) tmp = fmin(fmin(fmin(fmin(Float64(sqrt(fma(x, Float64(x - 1.55), fma(Float64(0.7 - y), Float64(0.7 - y), 0.600625))) - 0.075), t_1), fmax(Float64(0.45 - x), fmax(-0.55, t_0))), t_3), fmax(fmax(fmax(fmax(fmax(-0.55, Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_4)), Float64(t_4 - 0.275))); else tmp = fmin(fmin(fmin(fmin(Float64(sqrt(fma(-1.4, y, fma(x, x, 1.090625))) - 0.075), t_1), fmax(Float64(0.45 - x), fmax(Float64(x - 0.55), t_0))), t_3), fmax(fmax(fmax(fmax(fmax(Float64(x - 0.55), Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_2)), Float64(t_2 - 0.275))); end return tmp end
code[x_, y_] := Block[{t$95$0 = N[Max[N[(y - 0.275), $MachinePrecision], (-y)], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Max[N[Max[(-y), N[(y - 0.55), $MachinePrecision]], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Sqrt[N[(x * N[(x - 0.55), $MachinePrecision] + 0.15125), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[Max[(-x), N[Max[N[(x - 0.1), $MachinePrecision], N[Max[N[(y - 1.0), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[Sqrt[N[(x * -0.55 + 0.15125), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[x, 0.0042], N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(x * N[(x - 1.55), $MachinePrecision] + N[(N[(0.7 - y), $MachinePrecision] * N[(0.7 - y), $MachinePrecision] + 0.600625), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], t$95$1], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[-0.55, t$95$0], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], t$95$3], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[-0.55, N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$4), $MachinePrecision]], $MachinePrecision], N[(t$95$4 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(-1.4 * y + N[(x * x + 1.090625), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], t$95$1], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[N[(x - 0.55), $MachinePrecision], t$95$0], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], t$95$3], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[N[(x - 0.55), $MachinePrecision], N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$2), $MachinePrecision]], $MachinePrecision], N[(t$95$2 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]]]]]
\begin{array}{l}
t_0 := \mathsf{max}\left(y - 0.275, -y\right)\\
t_1 := \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.55\right), x - 0.825\right), 0.725 - x\right)\\
t_2 := \sqrt{\mathsf{fma}\left(x, x - 0.55, 0.15125\right)}\\
t_3 := \mathsf{max}\left(-x, \mathsf{max}\left(x - 0.1, \mathsf{max}\left(y - 1, -y\right)\right)\right)\\
t_4 := \sqrt{\mathsf{fma}\left(x, -0.55, 0.15125\right)}\\
\mathbf{if}\;x \leq 0.0042:\\
\;\;\;\;\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(x, x - 1.55, \mathsf{fma}\left(0.7 - y, 0.7 - y, 0.600625\right)\right)} - 0.075, t\_1\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(-0.55, t\_0\right)\right)\right), t\_3\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_4\right), t\_4 - 0.275\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(-1.4, y, \mathsf{fma}\left(x, x, 1.090625\right)\right)} - 0.075, t\_1\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(x - 0.55, t\_0\right)\right)\right), t\_3\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(x - 0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_2\right), t\_2 - 0.275\right)\right)\\
\end{array}
if x < 0.0041999999999999997Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
sub-flipN/A
associate-+l+N/A
lower-fma.f64N/A
distribute-lft-neg-outN/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
+-commutativeN/A
Applied rewrites99.8%
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
if 0.0041999999999999997 < x Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
associate-+l-N/A
lower--.f64N/A
lower-*.f64N/A
lower--.f64N/A
Applied rewrites99.5%
Applied rewrites99.5%
Taylor expanded in y around 0
Applied rewrites99.5%
Taylor expanded in y around 0
Applied rewrites99.5%
Taylor expanded in y around 0
Applied rewrites82.1%
(FPCore (x y)
:precision binary64
(let* ((t_0 (fmax (- y 0.275) (- y)))
(t_1
(fmax (fmax (fmax (- y) (- y 0.55)) (- x 0.825)) (- 0.725 x)))
(t_2 (sqrt (fma x (- x 0.55) 0.15125)))
(t_3 (fmax (- x) (fmax (- x 0.1) (fmax (- y 1.0) (- y)))))
(t_4 (sqrt (fma x -0.55 0.15125))))
(if (<= x 60.0)
(fmin
(fmin
(fmin
(fmin
(-
(sqrt (fma x (- x 1.55) (fma (- 0.7 y) (- 0.7 y) 0.600625)))
0.075)
t_1)
(fmax (- 0.45 x) (fmax -0.55 t_0)))
t_3)
(fmax
(fmax
(fmax (fmax (fmax -0.55 (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_4))
(- t_4 0.275)))
(fmin
(fmin
(fmin
(fmin (- (sqrt (fma x (- x 1.55) 1.090625)) 0.075) t_1)
(fmax (- 0.45 x) (fmax (- x 0.55) t_0)))
t_3)
(fmax
(fmax
(fmax (fmax (fmax (- x 0.55) (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_2))
(- t_2 0.275))))))double code(double x, double y) {
double t_0 = fmax((y - 0.275), -y);
double t_1 = fmax(fmax(fmax(-y, (y - 0.55)), (x - 0.825)), (0.725 - x));
double t_2 = sqrt(fma(x, (x - 0.55), 0.15125));
double t_3 = fmax(-x, fmax((x - 0.1), fmax((y - 1.0), -y)));
double t_4 = sqrt(fma(x, -0.55, 0.15125));
double tmp;
if (x <= 60.0) {
tmp = fmin(fmin(fmin(fmin((sqrt(fma(x, (x - 1.55), fma((0.7 - y), (0.7 - y), 0.600625))) - 0.075), t_1), fmax((0.45 - x), fmax(-0.55, t_0))), t_3), fmax(fmax(fmax(fmax(fmax(-0.55, (y - 0.55)), -x), (0.275 - y)), (0.175 - t_4)), (t_4 - 0.275)));
} else {
tmp = fmin(fmin(fmin(fmin((sqrt(fma(x, (x - 1.55), 1.090625)) - 0.075), t_1), fmax((0.45 - x), fmax((x - 0.55), t_0))), t_3), fmax(fmax(fmax(fmax(fmax((x - 0.55), (y - 0.55)), -x), (0.275 - y)), (0.175 - t_2)), (t_2 - 0.275)));
}
return tmp;
}
function code(x, y) t_0 = fmax(Float64(y - 0.275), Float64(-y)) t_1 = fmax(fmax(fmax(Float64(-y), Float64(y - 0.55)), Float64(x - 0.825)), Float64(0.725 - x)) t_2 = sqrt(fma(x, Float64(x - 0.55), 0.15125)) t_3 = fmax(Float64(-x), fmax(Float64(x - 0.1), fmax(Float64(y - 1.0), Float64(-y)))) t_4 = sqrt(fma(x, -0.55, 0.15125)) tmp = 0.0 if (x <= 60.0) tmp = fmin(fmin(fmin(fmin(Float64(sqrt(fma(x, Float64(x - 1.55), fma(Float64(0.7 - y), Float64(0.7 - y), 0.600625))) - 0.075), t_1), fmax(Float64(0.45 - x), fmax(-0.55, t_0))), t_3), fmax(fmax(fmax(fmax(fmax(-0.55, Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_4)), Float64(t_4 - 0.275))); else tmp = fmin(fmin(fmin(fmin(Float64(sqrt(fma(x, Float64(x - 1.55), 1.090625)) - 0.075), t_1), fmax(Float64(0.45 - x), fmax(Float64(x - 0.55), t_0))), t_3), fmax(fmax(fmax(fmax(fmax(Float64(x - 0.55), Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_2)), Float64(t_2 - 0.275))); end return tmp end
code[x_, y_] := Block[{t$95$0 = N[Max[N[(y - 0.275), $MachinePrecision], (-y)], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Max[N[Max[(-y), N[(y - 0.55), $MachinePrecision]], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Sqrt[N[(x * N[(x - 0.55), $MachinePrecision] + 0.15125), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[Max[(-x), N[Max[N[(x - 0.1), $MachinePrecision], N[Max[N[(y - 1.0), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[Sqrt[N[(x * -0.55 + 0.15125), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[x, 60.0], N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(x * N[(x - 1.55), $MachinePrecision] + N[(N[(0.7 - y), $MachinePrecision] * N[(0.7 - y), $MachinePrecision] + 0.600625), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], t$95$1], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[-0.55, t$95$0], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], t$95$3], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[-0.55, N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$4), $MachinePrecision]], $MachinePrecision], N[(t$95$4 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(x * N[(x - 1.55), $MachinePrecision] + 1.090625), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], t$95$1], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[N[(x - 0.55), $MachinePrecision], t$95$0], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], t$95$3], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[N[(x - 0.55), $MachinePrecision], N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$2), $MachinePrecision]], $MachinePrecision], N[(t$95$2 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]]]]]
\begin{array}{l}
t_0 := \mathsf{max}\left(y - 0.275, -y\right)\\
t_1 := \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.55\right), x - 0.825\right), 0.725 - x\right)\\
t_2 := \sqrt{\mathsf{fma}\left(x, x - 0.55, 0.15125\right)}\\
t_3 := \mathsf{max}\left(-x, \mathsf{max}\left(x - 0.1, \mathsf{max}\left(y - 1, -y\right)\right)\right)\\
t_4 := \sqrt{\mathsf{fma}\left(x, -0.55, 0.15125\right)}\\
\mathbf{if}\;x \leq 60:\\
\;\;\;\;\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(x, x - 1.55, \mathsf{fma}\left(0.7 - y, 0.7 - y, 0.600625\right)\right)} - 0.075, t\_1\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(-0.55, t\_0\right)\right)\right), t\_3\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_4\right), t\_4 - 0.275\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(x, x - 1.55, 1.090625\right)} - 0.075, t\_1\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(x - 0.55, t\_0\right)\right)\right), t\_3\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(x - 0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_2\right), t\_2 - 0.275\right)\right)\\
\end{array}
if x < 60Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
sub-flipN/A
associate-+l+N/A
lower-fma.f64N/A
distribute-lft-neg-outN/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
+-commutativeN/A
Applied rewrites99.8%
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
if 60 < x Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
sub-flipN/A
associate-+l+N/A
lower-fma.f64N/A
distribute-lft-neg-outN/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
+-commutativeN/A
Applied rewrites99.8%
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites67.0%
(FPCore (x y)
:precision binary64
(let* ((t_0 (sqrt (fma x -0.55 0.15125))))
(fmin
(fmin
(fmin
(fmin
(-
(sqrt (fma x (- x 1.55) (fma (- 0.7 y) (- 0.7 y) 0.600625)))
0.075)
(fmax (fmax (fmax (- y) (- y 0.55)) (- x 0.825)) (- 0.725 x)))
(fmax (- 0.45 x) (fmax -0.55 (fmax (- y 0.275) (- y)))))
(fmax (- x) (fmax (- x 0.1) (fmax (- y 1.0) (- y)))))
(fmax
(fmax
(fmax (fmax (fmax -0.55 (- y 0.55)) (- x)) (- 0.275 y))
(- 0.175 t_0))
(- t_0 0.275)))))double code(double x, double y) {
double t_0 = sqrt(fma(x, -0.55, 0.15125));
return fmin(fmin(fmin(fmin((sqrt(fma(x, (x - 1.55), fma((0.7 - y), (0.7 - y), 0.600625))) - 0.075), fmax(fmax(fmax(-y, (y - 0.55)), (x - 0.825)), (0.725 - x))), fmax((0.45 - x), fmax(-0.55, fmax((y - 0.275), -y)))), fmax(-x, fmax((x - 0.1), fmax((y - 1.0), -y)))), fmax(fmax(fmax(fmax(fmax(-0.55, (y - 0.55)), -x), (0.275 - y)), (0.175 - t_0)), (t_0 - 0.275)));
}
function code(x, y) t_0 = sqrt(fma(x, -0.55, 0.15125)) return fmin(fmin(fmin(fmin(Float64(sqrt(fma(x, Float64(x - 1.55), fma(Float64(0.7 - y), Float64(0.7 - y), 0.600625))) - 0.075), fmax(fmax(fmax(Float64(-y), Float64(y - 0.55)), Float64(x - 0.825)), Float64(0.725 - x))), fmax(Float64(0.45 - x), fmax(-0.55, fmax(Float64(y - 0.275), Float64(-y))))), fmax(Float64(-x), fmax(Float64(x - 0.1), fmax(Float64(y - 1.0), Float64(-y))))), fmax(fmax(fmax(fmax(fmax(-0.55, Float64(y - 0.55)), Float64(-x)), Float64(0.275 - y)), Float64(0.175 - t_0)), Float64(t_0 - 0.275))) end
code[x_, y_] := Block[{t$95$0 = N[Sqrt[N[(x * -0.55 + 0.15125), $MachinePrecision]], $MachinePrecision]}, N[Min[N[Min[N[Min[N[Min[N[(N[Sqrt[N[(x * N[(x - 1.55), $MachinePrecision] + N[(N[(0.7 - y), $MachinePrecision] * N[(0.7 - y), $MachinePrecision] + 0.600625), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - 0.075), $MachinePrecision], N[Max[N[Max[N[Max[(-y), N[(y - 0.55), $MachinePrecision]], $MachinePrecision], N[(x - 0.825), $MachinePrecision]], $MachinePrecision], N[(0.725 - x), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[(0.45 - x), $MachinePrecision], N[Max[-0.55, N[Max[N[(y - 0.275), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[(-x), N[Max[N[(x - 0.1), $MachinePrecision], N[Max[N[(y - 1.0), $MachinePrecision], (-y)], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Max[N[Max[N[Max[N[Max[N[Max[-0.55, N[(y - 0.55), $MachinePrecision]], $MachinePrecision], (-x)], $MachinePrecision], N[(0.275 - y), $MachinePrecision]], $MachinePrecision], N[(0.175 - t$95$0), $MachinePrecision]], $MachinePrecision], N[(t$95$0 - 0.275), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_0 := \sqrt{\mathsf{fma}\left(x, -0.55, 0.15125\right)}\\
\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\mathsf{min}\left(\sqrt{\mathsf{fma}\left(x, x - 1.55, \mathsf{fma}\left(0.7 - y, 0.7 - y, 0.600625\right)\right)} - 0.075, \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-y, y - 0.55\right), x - 0.825\right), 0.725 - x\right)\right), \mathsf{max}\left(0.45 - x, \mathsf{max}\left(-0.55, \mathsf{max}\left(y - 0.275, -y\right)\right)\right)\right), \mathsf{max}\left(-x, \mathsf{max}\left(x - 0.1, \mathsf{max}\left(y - 1, -y\right)\right)\right)\right), \mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(\mathsf{max}\left(-0.55, y - 0.55\right), -x\right), 0.275 - y\right), 0.175 - t\_0\right), t\_0 - 0.275\right)\right)
\end{array}
Initial program 99.8%
lift-+.f64N/A
+-commutativeN/A
lift-pow.f64N/A
lift--.f64N/A
sub-square-powN/A
pow2N/A
associate-+l+N/A
pow2N/A
sub-flipN/A
associate-+l+N/A
lower-fma.f64N/A
distribute-lft-neg-outN/A
*-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
+-commutativeN/A
Applied rewrites99.8%
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in y around 0
Applied rewrites99.8%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
Taylor expanded in x around 0
Applied rewrites81.7%
herbie shell --seed 2025322
(FPCore (x y)
:name "The letters hi in the upper-right quadrant"
:precision binary64
(fmin (fmin (fmin (fmin (fmax (fmax (fmax (- y 0.55) (- y)) (- x 0.825)) (- 0.725 x)) (- (sqrt (+ (pow (- y 0.7) 2.0) (pow (- x 0.775) 2.0))) 0.075)) (fmax (fmax (fmax (- y) (- y 0.275)) (- x 0.55)) (- 0.45 x))) (fmax (fmax (fmax (- y) (- y 1.0)) (- x 0.1)) (- x))) (fmax (fmax (fmax (fmax (fmax (- y 0.55) (- x 0.55)) (- x)) (- 0.275 y)) (- 0.175 (sqrt (+ (pow (- y 0.275) 2.0) (pow (- x 0.275) 2.0))))) (- (sqrt (+ (pow (- y 0.275) 2.0) (pow (- x 0.275) 2.0))) 0.275))))