
(FPCore (x y z) :precision binary64 (- (+ x (cos y)) (* z (sin y))))
double code(double x, double y, double z) {
return (x + cos(y)) - (z * sin(y));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x + cos(y)) - (z * sin(y))
end function
public static double code(double x, double y, double z) {
return (x + Math.cos(y)) - (z * Math.sin(y));
}
def code(x, y, z): return (x + math.cos(y)) - (z * math.sin(y))
function code(x, y, z) return Float64(Float64(x + cos(y)) - Float64(z * sin(y))) end
function tmp = code(x, y, z) tmp = (x + cos(y)) - (z * sin(y)); end
code[x_, y_, z_] := N[(N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision] - N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x + \cos y\right) - z \cdot \sin y
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 12 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (- (+ x (cos y)) (* z (sin y))))
double code(double x, double y, double z) {
return (x + cos(y)) - (z * sin(y));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x + cos(y)) - (z * sin(y))
end function
public static double code(double x, double y, double z) {
return (x + Math.cos(y)) - (z * Math.sin(y));
}
def code(x, y, z): return (x + math.cos(y)) - (z * math.sin(y))
function code(x, y, z) return Float64(Float64(x + cos(y)) - Float64(z * sin(y))) end
function tmp = code(x, y, z) tmp = (x + cos(y)) - (z * sin(y)); end
code[x_, y_, z_] := N[(N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision] - N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x + \cos y\right) - z \cdot \sin y
\end{array}
(FPCore (x y z) :precision binary64 (- (+ x (cos y)) (* z (sin y))))
double code(double x, double y, double z) {
return (x + cos(y)) - (z * sin(y));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x + cos(y)) - (z * sin(y))
end function
public static double code(double x, double y, double z) {
return (x + Math.cos(y)) - (z * Math.sin(y));
}
def code(x, y, z): return (x + math.cos(y)) - (z * math.sin(y))
function code(x, y, z) return Float64(Float64(x + cos(y)) - Float64(z * sin(y))) end
function tmp = code(x, y, z) tmp = (x + cos(y)) - (z * sin(y)); end
code[x_, y_, z_] := N[(N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision] - N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(x + \cos y\right) - z \cdot \sin y
\end{array}
Initial program 99.9%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (+ x (cos y)))
(t_1 (* z (sin y)))
(t_2 (- t_0 t_1))
(t_3 (- (+ x 1.0) t_1)))
(if (<= t_2 -150000.0) t_3 (if (<= t_2 0.995) t_0 t_3))))
double code(double x, double y, double z) {
double t_0 = x + cos(y);
double t_1 = z * sin(y);
double t_2 = t_0 - t_1;
double t_3 = (x + 1.0) - t_1;
double tmp;
if (t_2 <= -150000.0) {
tmp = t_3;
} else if (t_2 <= 0.995) {
tmp = t_0;
} else {
tmp = t_3;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = x + cos(y)
t_1 = z * sin(y)
t_2 = t_0 - t_1
t_3 = (x + 1.0d0) - t_1
if (t_2 <= (-150000.0d0)) then
tmp = t_3
else if (t_2 <= 0.995d0) then
tmp = t_0
else
tmp = t_3
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = x + Math.cos(y);
double t_1 = z * Math.sin(y);
double t_2 = t_0 - t_1;
double t_3 = (x + 1.0) - t_1;
double tmp;
if (t_2 <= -150000.0) {
tmp = t_3;
} else if (t_2 <= 0.995) {
tmp = t_0;
} else {
tmp = t_3;
}
return tmp;
}
def code(x, y, z): t_0 = x + math.cos(y) t_1 = z * math.sin(y) t_2 = t_0 - t_1 t_3 = (x + 1.0) - t_1 tmp = 0 if t_2 <= -150000.0: tmp = t_3 elif t_2 <= 0.995: tmp = t_0 else: tmp = t_3 return tmp
function code(x, y, z) t_0 = Float64(x + cos(y)) t_1 = Float64(z * sin(y)) t_2 = Float64(t_0 - t_1) t_3 = Float64(Float64(x + 1.0) - t_1) tmp = 0.0 if (t_2 <= -150000.0) tmp = t_3; elseif (t_2 <= 0.995) tmp = t_0; else tmp = t_3; end return tmp end
function tmp_2 = code(x, y, z) t_0 = x + cos(y); t_1 = z * sin(y); t_2 = t_0 - t_1; t_3 = (x + 1.0) - t_1; tmp = 0.0; if (t_2 <= -150000.0) tmp = t_3; elseif (t_2 <= 0.995) tmp = t_0; else tmp = t_3; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 - t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(x + 1.0), $MachinePrecision] - t$95$1), $MachinePrecision]}, If[LessEqual[t$95$2, -150000.0], t$95$3, If[LessEqual[t$95$2, 0.995], t$95$0, t$95$3]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x + \cos y\\
t_1 := z \cdot \sin y\\
t_2 := t\_0 - t\_1\\
t_3 := \left(x + 1\right) - t\_1\\
\mathbf{if}\;t\_2 \leq -150000:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 0.995:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) < -1.5e5 or 0.994999999999999996 < (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) Initial program 99.9%
Taylor expanded in y around 0
Applied rewrites99.6%
if -1.5e5 < (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) < 0.994999999999999996Initial program 99.9%
Taylor expanded in z around 0
+-commutativeN/A
lower-+.f64N/A
lower-cos.f6498.0
Applied rewrites98.0%
Final simplification99.4%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (+ x (cos y)))
(t_1 (- t_0 (* z (sin y))))
(t_2 (fma z (- (sin y)) x)))
(if (<= t_1 -150000.0) t_2 (if (<= t_1 2.0) t_0 t_2))))
double code(double x, double y, double z) {
double t_0 = x + cos(y);
double t_1 = t_0 - (z * sin(y));
double t_2 = fma(z, -sin(y), x);
double tmp;
if (t_1 <= -150000.0) {
tmp = t_2;
} else if (t_1 <= 2.0) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
function code(x, y, z) t_0 = Float64(x + cos(y)) t_1 = Float64(t_0 - Float64(z * sin(y))) t_2 = fma(z, Float64(-sin(y)), x) tmp = 0.0 if (t_1 <= -150000.0) tmp = t_2; elseif (t_1 <= 2.0) tmp = t_0; else tmp = t_2; end return tmp end
code[x_, y_, z_] := Block[{t$95$0 = N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 - N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(z * (-N[Sin[y], $MachinePrecision]) + x), $MachinePrecision]}, If[LessEqual[t$95$1, -150000.0], t$95$2, If[LessEqual[t$95$1, 2.0], t$95$0, t$95$2]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x + \cos y\\
t_1 := t\_0 - z \cdot \sin y\\
t_2 := \mathsf{fma}\left(z, -\sin y, x\right)\\
\mathbf{if}\;t\_1 \leq -150000:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 2:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) < -1.5e5 or 2 < (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) Initial program 99.9%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6461.0
Applied rewrites61.0%
Taylor expanded in z around inf
lower-*.f64N/A
lower--.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-/.f64N/A
lower-cos.f64N/A
lower-sin.f6486.9
Applied rewrites86.9%
Taylor expanded in x around 0
Applied rewrites99.9%
Taylor expanded in z around inf
Applied rewrites97.6%
if -1.5e5 < (-.f64 (+.f64 x (cos.f64 y)) (*.f64 z (sin.f64 y))) < 2Initial program 100.0%
Taylor expanded in z around 0
+-commutativeN/A
lower-+.f64N/A
lower-cos.f6498.8
Applied rewrites98.8%
Final simplification98.0%
(FPCore (x y z) :precision binary64 (let* ((t_0 (* z (sin y))) (t_1 (- (+ x 1.0) t_0))) (if (<= x -1.45e-8) t_1 (if (<= x 6e-54) (- (cos y) t_0) t_1))))
double code(double x, double y, double z) {
double t_0 = z * sin(y);
double t_1 = (x + 1.0) - t_0;
double tmp;
if (x <= -1.45e-8) {
tmp = t_1;
} else if (x <= 6e-54) {
tmp = cos(y) - t_0;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = z * sin(y)
t_1 = (x + 1.0d0) - t_0
if (x <= (-1.45d-8)) then
tmp = t_1
else if (x <= 6d-54) then
tmp = cos(y) - t_0
else
tmp = t_1
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = z * Math.sin(y);
double t_1 = (x + 1.0) - t_0;
double tmp;
if (x <= -1.45e-8) {
tmp = t_1;
} else if (x <= 6e-54) {
tmp = Math.cos(y) - t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(x, y, z): t_0 = z * math.sin(y) t_1 = (x + 1.0) - t_0 tmp = 0 if x <= -1.45e-8: tmp = t_1 elif x <= 6e-54: tmp = math.cos(y) - t_0 else: tmp = t_1 return tmp
function code(x, y, z) t_0 = Float64(z * sin(y)) t_1 = Float64(Float64(x + 1.0) - t_0) tmp = 0.0 if (x <= -1.45e-8) tmp = t_1; elseif (x <= 6e-54) tmp = Float64(cos(y) - t_0); else tmp = t_1; end return tmp end
function tmp_2 = code(x, y, z) t_0 = z * sin(y); t_1 = (x + 1.0) - t_0; tmp = 0.0; if (x <= -1.45e-8) tmp = t_1; elseif (x <= 6e-54) tmp = cos(y) - t_0; else tmp = t_1; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(z * N[Sin[y], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(x + 1.0), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[x, -1.45e-8], t$95$1, If[LessEqual[x, 6e-54], N[(N[Cos[y], $MachinePrecision] - t$95$0), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := z \cdot \sin y\\
t_1 := \left(x + 1\right) - t\_0\\
\mathbf{if}\;x \leq -1.45 \cdot 10^{-8}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;x \leq 6 \cdot 10^{-54}:\\
\;\;\;\;\cos y - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if x < -1.4500000000000001e-8 or 6.00000000000000018e-54 < x Initial program 100.0%
Taylor expanded in y around 0
Applied rewrites99.5%
if -1.4500000000000001e-8 < x < 6.00000000000000018e-54Initial program 99.8%
Taylor expanded in x around 0
lower-cos.f6499.3
Applied rewrites99.3%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (+ x (cos y))))
(if (<= y -1.65)
t_0
(if (<= y 1.15e+14)
(-
(+ x 1.0)
(*
y
(fma
(* y y)
(*
z
(fma
y
(* y (fma (* y y) -0.0001984126984126984 0.008333333333333333))
-0.16666666666666666))
z)))
t_0))))
double code(double x, double y, double z) {
double t_0 = x + cos(y);
double tmp;
if (y <= -1.65) {
tmp = t_0;
} else if (y <= 1.15e+14) {
tmp = (x + 1.0) - (y * fma((y * y), (z * fma(y, (y * fma((y * y), -0.0001984126984126984, 0.008333333333333333)), -0.16666666666666666)), z));
} else {
tmp = t_0;
}
return tmp;
}
function code(x, y, z) t_0 = Float64(x + cos(y)) tmp = 0.0 if (y <= -1.65) tmp = t_0; elseif (y <= 1.15e+14) tmp = Float64(Float64(x + 1.0) - Float64(y * fma(Float64(y * y), Float64(z * fma(y, Float64(y * fma(Float64(y * y), -0.0001984126984126984, 0.008333333333333333)), -0.16666666666666666)), z))); else tmp = t_0; end return tmp end
code[x_, y_, z_] := Block[{t$95$0 = N[(x + N[Cos[y], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y, -1.65], t$95$0, If[LessEqual[y, 1.15e+14], N[(N[(x + 1.0), $MachinePrecision] - N[(y * N[(N[(y * y), $MachinePrecision] * N[(z * N[(y * N[(y * N[(N[(y * y), $MachinePrecision] * -0.0001984126984126984 + 0.008333333333333333), $MachinePrecision]), $MachinePrecision] + -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x + \cos y\\
\mathbf{if}\;y \leq -1.65:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y \leq 1.15 \cdot 10^{+14}:\\
\;\;\;\;\left(x + 1\right) - y \cdot \mathsf{fma}\left(y \cdot y, z \cdot \mathsf{fma}\left(y, y \cdot \mathsf{fma}\left(y \cdot y, -0.0001984126984126984, 0.008333333333333333\right), -0.16666666666666666\right), z\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y < -1.6499999999999999 or 1.15e14 < y Initial program 99.8%
Taylor expanded in z around 0
+-commutativeN/A
lower-+.f64N/A
lower-cos.f6468.7
Applied rewrites68.7%
if -1.6499999999999999 < y < 1.15e14Initial program 100.0%
Taylor expanded in y around 0
Applied rewrites100.0%
Taylor expanded in y around 0
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.3%
Taylor expanded in y around 0
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.3%
Final simplification84.9%
(FPCore (x y z)
:precision binary64
(if (<= y -34000000.0)
(+ x 1.0)
(if (<= y 5.8e+14)
(-
(+ x 1.0)
(*
y
(fma
(* y y)
(*
z
(fma
y
(* y (fma (* y y) -0.0001984126984126984 0.008333333333333333))
-0.16666666666666666))
z)))
(+ x 1.0))))
double code(double x, double y, double z) {
double tmp;
if (y <= -34000000.0) {
tmp = x + 1.0;
} else if (y <= 5.8e+14) {
tmp = (x + 1.0) - (y * fma((y * y), (z * fma(y, (y * fma((y * y), -0.0001984126984126984, 0.008333333333333333)), -0.16666666666666666)), z));
} else {
tmp = x + 1.0;
}
return tmp;
}
function code(x, y, z) tmp = 0.0 if (y <= -34000000.0) tmp = Float64(x + 1.0); elseif (y <= 5.8e+14) tmp = Float64(Float64(x + 1.0) - Float64(y * fma(Float64(y * y), Float64(z * fma(y, Float64(y * fma(Float64(y * y), -0.0001984126984126984, 0.008333333333333333)), -0.16666666666666666)), z))); else tmp = Float64(x + 1.0); end return tmp end
code[x_, y_, z_] := If[LessEqual[y, -34000000.0], N[(x + 1.0), $MachinePrecision], If[LessEqual[y, 5.8e+14], N[(N[(x + 1.0), $MachinePrecision] - N[(y * N[(N[(y * y), $MachinePrecision] * N[(z * N[(y * N[(y * N[(N[(y * y), $MachinePrecision] * -0.0001984126984126984 + 0.008333333333333333), $MachinePrecision]), $MachinePrecision] + -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(x + 1.0), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -34000000:\\
\;\;\;\;x + 1\\
\mathbf{elif}\;y \leq 5.8 \cdot 10^{+14}:\\
\;\;\;\;\left(x + 1\right) - y \cdot \mathsf{fma}\left(y \cdot y, z \cdot \mathsf{fma}\left(y, y \cdot \mathsf{fma}\left(y \cdot y, -0.0001984126984126984, 0.008333333333333333\right), -0.16666666666666666\right), z\right)\\
\mathbf{else}:\\
\;\;\;\;x + 1\\
\end{array}
\end{array}
if y < -3.4e7 or 5.8e14 < y Initial program 99.8%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6442.1
Applied rewrites42.1%
if -3.4e7 < y < 5.8e14Initial program 100.0%
Taylor expanded in y around 0
Applied rewrites99.3%
Taylor expanded in y around 0
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
Applied rewrites98.6%
Taylor expanded in y around 0
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
Applied rewrites98.6%
(FPCore (x y z)
:precision binary64
(if (<= y -1.7e+14)
(+ x 1.0)
(if (<= y 1.05e+45)
(-
(+ x 1.0)
(*
y
(fma
(* y y)
(* z (fma 0.008333333333333333 (* y y) -0.16666666666666666))
z)))
(+ x 1.0))))
double code(double x, double y, double z) {
double tmp;
if (y <= -1.7e+14) {
tmp = x + 1.0;
} else if (y <= 1.05e+45) {
tmp = (x + 1.0) - (y * fma((y * y), (z * fma(0.008333333333333333, (y * y), -0.16666666666666666)), z));
} else {
tmp = x + 1.0;
}
return tmp;
}
function code(x, y, z) tmp = 0.0 if (y <= -1.7e+14) tmp = Float64(x + 1.0); elseif (y <= 1.05e+45) tmp = Float64(Float64(x + 1.0) - Float64(y * fma(Float64(y * y), Float64(z * fma(0.008333333333333333, Float64(y * y), -0.16666666666666666)), z))); else tmp = Float64(x + 1.0); end return tmp end
code[x_, y_, z_] := If[LessEqual[y, -1.7e+14], N[(x + 1.0), $MachinePrecision], If[LessEqual[y, 1.05e+45], N[(N[(x + 1.0), $MachinePrecision] - N[(y * N[(N[(y * y), $MachinePrecision] * N[(z * N[(0.008333333333333333 * N[(y * y), $MachinePrecision] + -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(x + 1.0), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -1.7 \cdot 10^{+14}:\\
\;\;\;\;x + 1\\
\mathbf{elif}\;y \leq 1.05 \cdot 10^{+45}:\\
\;\;\;\;\left(x + 1\right) - y \cdot \mathsf{fma}\left(y \cdot y, z \cdot \mathsf{fma}\left(0.008333333333333333, y \cdot y, -0.16666666666666666\right), z\right)\\
\mathbf{else}:\\
\;\;\;\;x + 1\\
\end{array}
\end{array}
if y < -1.7e14 or 1.04999999999999997e45 < y Initial program 99.8%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6441.8
Applied rewrites41.8%
if -1.7e14 < y < 1.04999999999999997e45Initial program 100.0%
Taylor expanded in y around 0
Applied rewrites99.3%
Taylor expanded in y around 0
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6497.1
Applied rewrites97.1%
(FPCore (x y z)
:precision binary64
(if (<= y -3200000.0)
(+ x 1.0)
(if (<= y 1.75e+14)
(+ 1.0 (fma y (- (* y (fma y (* z 0.16666666666666666) -0.5)) z) x))
(+ x 1.0))))
double code(double x, double y, double z) {
double tmp;
if (y <= -3200000.0) {
tmp = x + 1.0;
} else if (y <= 1.75e+14) {
tmp = 1.0 + fma(y, ((y * fma(y, (z * 0.16666666666666666), -0.5)) - z), x);
} else {
tmp = x + 1.0;
}
return tmp;
}
function code(x, y, z) tmp = 0.0 if (y <= -3200000.0) tmp = Float64(x + 1.0); elseif (y <= 1.75e+14) tmp = Float64(1.0 + fma(y, Float64(Float64(y * fma(y, Float64(z * 0.16666666666666666), -0.5)) - z), x)); else tmp = Float64(x + 1.0); end return tmp end
code[x_, y_, z_] := If[LessEqual[y, -3200000.0], N[(x + 1.0), $MachinePrecision], If[LessEqual[y, 1.75e+14], N[(1.0 + N[(y * N[(N[(y * N[(y * N[(z * 0.16666666666666666), $MachinePrecision] + -0.5), $MachinePrecision]), $MachinePrecision] - z), $MachinePrecision] + x), $MachinePrecision]), $MachinePrecision], N[(x + 1.0), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -3200000:\\
\;\;\;\;x + 1\\
\mathbf{elif}\;y \leq 1.75 \cdot 10^{+14}:\\
\;\;\;\;1 + \mathsf{fma}\left(y, y \cdot \mathsf{fma}\left(y, z \cdot 0.16666666666666666, -0.5\right) - z, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + 1\\
\end{array}
\end{array}
if y < -3.2e6 or 1.75e14 < y Initial program 99.8%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6442.1
Applied rewrites42.1%
if -3.2e6 < y < 1.75e14Initial program 100.0%
Taylor expanded in y around 0
lower-+.f64N/A
+-commutativeN/A
lower-fma.f64N/A
lower--.f64N/A
lower-*.f64N/A
sub-negN/A
*-commutativeN/A
associate-*l*N/A
metadata-evalN/A
lower-fma.f64N/A
lower-*.f6498.4
Applied rewrites98.4%
(FPCore (x y z) :precision binary64 (if (<= y -5e+41) (+ x 1.0) (if (<= y 4.7e+114) (- x (fma y z -1.0)) (+ x 1.0))))
double code(double x, double y, double z) {
double tmp;
if (y <= -5e+41) {
tmp = x + 1.0;
} else if (y <= 4.7e+114) {
tmp = x - fma(y, z, -1.0);
} else {
tmp = x + 1.0;
}
return tmp;
}
function code(x, y, z) tmp = 0.0 if (y <= -5e+41) tmp = Float64(x + 1.0); elseif (y <= 4.7e+114) tmp = Float64(x - fma(y, z, -1.0)); else tmp = Float64(x + 1.0); end return tmp end
code[x_, y_, z_] := If[LessEqual[y, -5e+41], N[(x + 1.0), $MachinePrecision], If[LessEqual[y, 4.7e+114], N[(x - N[(y * z + -1.0), $MachinePrecision]), $MachinePrecision], N[(x + 1.0), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -5 \cdot 10^{+41}:\\
\;\;\;\;x + 1\\
\mathbf{elif}\;y \leq 4.7 \cdot 10^{+114}:\\
\;\;\;\;x - \mathsf{fma}\left(y, z, -1\right)\\
\mathbf{else}:\\
\;\;\;\;x + 1\\
\end{array}
\end{array}
if y < -5.00000000000000022e41 or 4.7000000000000001e114 < y Initial program 99.8%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6443.2
Applied rewrites43.2%
if -5.00000000000000022e41 < y < 4.7000000000000001e114Initial program 100.0%
Taylor expanded in y around 0
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
associate-+l-N/A
lower--.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f6487.9
Applied rewrites87.9%
(FPCore (x y z) :precision binary64 (if (<= z -5.4e+169) (- (* y z)) (+ x 1.0)))
double code(double x, double y, double z) {
double tmp;
if (z <= -5.4e+169) {
tmp = -(y * z);
} else {
tmp = x + 1.0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (z <= (-5.4d+169)) then
tmp = -(y * z)
else
tmp = x + 1.0d0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (z <= -5.4e+169) {
tmp = -(y * z);
} else {
tmp = x + 1.0;
}
return tmp;
}
def code(x, y, z): tmp = 0 if z <= -5.4e+169: tmp = -(y * z) else: tmp = x + 1.0 return tmp
function code(x, y, z) tmp = 0.0 if (z <= -5.4e+169) tmp = Float64(-Float64(y * z)); else tmp = Float64(x + 1.0); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (z <= -5.4e+169) tmp = -(y * z); else tmp = x + 1.0; end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[z, -5.4e+169], (-N[(y * z), $MachinePrecision]), N[(x + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z \leq -5.4 \cdot 10^{+169}:\\
\;\;\;\;-y \cdot z\\
\mathbf{else}:\\
\;\;\;\;x + 1\\
\end{array}
\end{array}
if z < -5.39999999999999981e169Initial program 99.8%
Taylor expanded in y around 0
lower-+.f64N/A
+-commutativeN/A
lower-fma.f64N/A
lower--.f64N/A
lower-*.f64N/A
sub-negN/A
*-commutativeN/A
associate-*l*N/A
metadata-evalN/A
lower-fma.f64N/A
lower-*.f6470.0
Applied rewrites70.0%
Taylor expanded in z around -inf
Applied rewrites49.8%
Taylor expanded in y around 0
Applied rewrites50.7%
if -5.39999999999999981e169 < z Initial program 99.9%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6466.2
Applied rewrites66.2%
(FPCore (x y z) :precision binary64 (+ x 1.0))
double code(double x, double y, double z) {
return x + 1.0;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x + 1.0d0
end function
public static double code(double x, double y, double z) {
return x + 1.0;
}
def code(x, y, z): return x + 1.0
function code(x, y, z) return Float64(x + 1.0) end
function tmp = code(x, y, z) tmp = x + 1.0; end
code[x_, y_, z_] := N[(x + 1.0), $MachinePrecision]
\begin{array}{l}
\\
x + 1
\end{array}
Initial program 99.9%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6461.8
Applied rewrites61.8%
(FPCore (x y z) :precision binary64 1.0)
double code(double x, double y, double z) {
return 1.0;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 1.0d0
end function
public static double code(double x, double y, double z) {
return 1.0;
}
def code(x, y, z): return 1.0
function code(x, y, z) return 1.0 end
function tmp = code(x, y, z) tmp = 1.0; end
code[x_, y_, z_] := 1.0
\begin{array}{l}
\\
1
\end{array}
Initial program 99.9%
Taylor expanded in y around 0
+-commutativeN/A
lower-+.f6461.8
Applied rewrites61.8%
Taylor expanded in x around 0
Applied rewrites23.9%
herbie shell --seed 2024238
(FPCore (x y z)
:name "Graphics.Rasterific.Svg.PathConverter:segmentToBezier from rasterific-svg-0.2.3.1, B"
:precision binary64
(- (+ x (cos y)) (* z (sin y))))