
(FPCore (x y z) :precision binary64 (* (/ 1.0 2.0) (+ x (* y (sqrt z)))))
double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * sqrt(z)));
}
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 / 2.0d0) * (x + (y * sqrt(z)))
end function
public static double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * Math.sqrt(z)));
}
def code(x, y, z): return (1.0 / 2.0) * (x + (y * math.sqrt(z)))
function code(x, y, z) return Float64(Float64(1.0 / 2.0) * Float64(x + Float64(y * sqrt(z)))) end
function tmp = code(x, y, z) tmp = (1.0 / 2.0) * (x + (y * sqrt(z))); end
code[x_, y_, z_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(x + N[(y * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{2} \cdot \left(x + y \cdot \sqrt{z}\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (* (/ 1.0 2.0) (+ x (* y (sqrt z)))))
double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * sqrt(z)));
}
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 / 2.0d0) * (x + (y * sqrt(z)))
end function
public static double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * Math.sqrt(z)));
}
def code(x, y, z): return (1.0 / 2.0) * (x + (y * math.sqrt(z)))
function code(x, y, z) return Float64(Float64(1.0 / 2.0) * Float64(x + Float64(y * sqrt(z)))) end
function tmp = code(x, y, z) tmp = (1.0 / 2.0) * (x + (y * sqrt(z))); end
code[x_, y_, z_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(x + N[(y * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{2} \cdot \left(x + y \cdot \sqrt{z}\right)
\end{array}
(FPCore (x y z) :precision binary64 (* (/ 1.0 2.0) (+ x (* y (sqrt z)))))
double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * sqrt(z)));
}
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 / 2.0d0) * (x + (y * sqrt(z)))
end function
public static double code(double x, double y, double z) {
return (1.0 / 2.0) * (x + (y * Math.sqrt(z)));
}
def code(x, y, z): return (1.0 / 2.0) * (x + (y * math.sqrt(z)))
function code(x, y, z) return Float64(Float64(1.0 / 2.0) * Float64(x + Float64(y * sqrt(z)))) end
function tmp = code(x, y, z) tmp = (1.0 / 2.0) * (x + (y * sqrt(z))); end
code[x_, y_, z_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(x + N[(y * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{2} \cdot \left(x + y \cdot \sqrt{z}\right)
\end{array}
Initial program 99.8%
(FPCore (x y z) :precision binary64 (* (/ 1.0 2.0) (* y (sqrt z))))
double code(double x, double y, double z) {
return (1.0 / 2.0) * (y * sqrt(z));
}
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 / 2.0d0) * (y * sqrt(z))
end function
public static double code(double x, double y, double z) {
return (1.0 / 2.0) * (y * Math.sqrt(z));
}
def code(x, y, z): return (1.0 / 2.0) * (y * math.sqrt(z))
function code(x, y, z) return Float64(Float64(1.0 / 2.0) * Float64(y * sqrt(z))) end
function tmp = code(x, y, z) tmp = (1.0 / 2.0) * (y * sqrt(z)); end
code[x_, y_, z_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(y * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{2} \cdot \left(y \cdot \sqrt{z}\right)
\end{array}
Initial program 99.8%
Taylor expanded in x around 0
Applied rewrites49.4%
(FPCore (x y z) :precision binary64 (* y (sqrt z)))
double code(double x, double y, double z) {
return y * sqrt(z);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = y * sqrt(z)
end function
public static double code(double x, double y, double z) {
return y * Math.sqrt(z);
}
def code(x, y, z): return y * math.sqrt(z)
function code(x, y, z) return Float64(y * sqrt(z)) end
function tmp = code(x, y, z) tmp = y * sqrt(z); end
code[x_, y_, z_] := N[(y * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
y \cdot \sqrt{z}
\end{array}
Initial program 99.8%
Taylor expanded in x around inf
Applied rewrites3.2%
Taylor expanded in x around inf
Applied rewrites14.4%
(FPCore (x y z) :precision binary64 (sqrt z))
double code(double x, double y, double z) {
return sqrt(z);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = sqrt(z)
end function
public static double code(double x, double y, double z) {
return Math.sqrt(z);
}
def code(x, y, z): return math.sqrt(z)
function code(x, y, z) return sqrt(z) end
function tmp = code(x, y, z) tmp = sqrt(z); end
code[x_, y_, z_] := N[Sqrt[z], $MachinePrecision]
\begin{array}{l}
\\
\sqrt{z}
\end{array}
Initial program 99.8%
Taylor expanded in x around inf
Applied rewrites3.2%
herbie shell --seed 2024321
(FPCore (x y z)
:name "Diagrams.Solve.Polynomial:quadForm from diagrams-solve-0.1, B"
:precision binary64
:pre (TRUE)
(* (/ 1.0 2.0) (+ x (* y (sqrt z)))))