(FPCore (a) :precision binary64 (/ (sqrt a) (pow 2.0 (/ 1.0 4.0))))
double code(double a) { return sqrt(a) / pow(2.0, (1.0 / 4.0)); }
real(8) function code(a) real(8), intent (in) :: a code = sqrt(a) / (2.0d0 ** (1.0d0 / 4.0d0)) end function
public static double code(double a) { return Math.sqrt(a) / Math.pow(2.0, (1.0 / 4.0)); }
def code(a): return math.sqrt(a) / math.pow(2.0, (1.0 / 4.0))
function code(a) return Float64(sqrt(a) / (2.0 ^ Float64(1.0 / 4.0))) end
function tmp = code(a) tmp = sqrt(a) / (2.0 ^ (1.0 / 4.0)); end
code[a_] := N[(N[Sqrt[a], $MachinePrecision] / N[Power[2.0, N[(1.0 / 4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \frac{\sqrt{a}}{{2}^{\left(\frac{1}{4}\right)}} \end{array}
Sampling outcomes in binary64 precision:
Herbie found 3 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (a) :precision binary64 (/ (sqrt a) (pow 2.0 (/ 1.0 4.0))))
double code(double a) { return sqrt(a) / pow(2.0, (1.0 / 4.0)); }
real(8) function code(a) real(8), intent (in) :: a code = sqrt(a) / (2.0d0 ** (1.0d0 / 4.0d0)) end function
public static double code(double a) { return Math.sqrt(a) / Math.pow(2.0, (1.0 / 4.0)); }
def code(a): return math.sqrt(a) / math.pow(2.0, (1.0 / 4.0))
function code(a) return Float64(sqrt(a) / (2.0 ^ Float64(1.0 / 4.0))) end
function tmp = code(a) tmp = sqrt(a) / (2.0 ^ (1.0 / 4.0)); end
code[a_] := N[(N[Sqrt[a], $MachinePrecision] / N[Power[2.0, N[(1.0 / 4.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \frac{\sqrt{a}}{{2}^{\left(\frac{1}{4}\right)}} \end{array}
(FPCore (a) :precision binary64 (/ (sqrt a) (pow 16.0 0.0625)))
double code(double a) { return sqrt(a) / pow(16.0, 0.0625); }
real(8) function code(a) real(8), intent (in) :: a code = sqrt(a) / (16.0d0 ** 0.0625d0) end function
public static double code(double a) { return Math.sqrt(a) / Math.pow(16.0, 0.0625); }
def code(a): return math.sqrt(a) / math.pow(16.0, 0.0625)
function code(a) return Float64(sqrt(a) / (16.0 ^ 0.0625)) end
function tmp = code(a) tmp = sqrt(a) / (16.0 ^ 0.0625); end
code[a_] := N[(N[Sqrt[a], $MachinePrecision] / N[Power[16.0, 0.0625], $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \frac{\sqrt{a}}{{16}^{0.0625}} \end{array}
Initial program 99.5%
lift-pow.f64
N/A
sqr-pow
N/A
pow-prod-down
N/A
metadata-eval
N/A
sqr-pow
N/A
pow-prod-down
N/A
lower-pow.f64
N/A
metadata-eval
N/A
lift-/.f64
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
99.5
Applied rewrites99.5%
(FPCore (a) :precision binary64 (* (pow 65536.0 0.015625) (sqrt (* 0.5 a))))
double code(double a) { return pow(65536.0, 0.015625) * sqrt((0.5 * a)); }
real(8) function code(a) real(8), intent (in) :: a code = (65536.0d0 ** 0.015625d0) * sqrt((0.5d0 * a)) end function
public static double code(double a) { return Math.pow(65536.0, 0.015625) * Math.sqrt((0.5 * a)); }
def code(a): return math.pow(65536.0, 0.015625) * math.sqrt((0.5 * a))
function code(a) return Float64((65536.0 ^ 0.015625) * sqrt(Float64(0.5 * a))) end
function tmp = code(a) tmp = (65536.0 ^ 0.015625) * sqrt((0.5 * a)); end
code[a_] := N[(N[Power[65536.0, 0.015625], $MachinePrecision] * N[Sqrt[N[(0.5 * a), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ {65536}^{0.015625} \cdot \sqrt{0.5 \cdot a} \end{array}
Initial program 99.5%
Applied rewrites99.0%
lift-*.f64
N/A
*-commutative
N/A
lower-*.f64
99.0
lift-pow.f64
N/A
sqr-pow
N/A
pow-prod-down
N/A
sqr-pow
N/A
pow-prod-down
N/A
lower-pow.f64
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
99.0
lift-/.f64
N/A
lift-sqrt.f64
N/A
lift-sqrt.f64
N/A
sqrt-undiv
N/A
lower-sqrt.f64
N/A
clear-num
N/A
associate-/r/
N/A
metadata-eval
N/A
lower-*.f64
99.5
Applied rewrites99.5%
(FPCore (a) :precision binary64 (* (pow 16.0 -0.0625) (sqrt a)))
double code(double a) { return pow(16.0, -0.0625) * sqrt(a); }
real(8) function code(a) real(8), intent (in) :: a code = (16.0d0 ** (-0.0625d0)) * sqrt(a) end function
public static double code(double a) { return Math.pow(16.0, -0.0625) * Math.sqrt(a); }
def code(a): return math.pow(16.0, -0.0625) * math.sqrt(a)
function code(a) return Float64((16.0 ^ -0.0625) * sqrt(a)) end
function tmp = code(a) tmp = (16.0 ^ -0.0625) * sqrt(a); end
code[a_] := N[(N[Power[16.0, -0.0625], $MachinePrecision] * N[Sqrt[a], $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ {16}^{-0.0625} \cdot \sqrt{a} \end{array}
Initial program 99.5%
lift-/.f64
N/A
clear-num
N/A
associate-/r/
N/A
lower-*.f64
N/A
inv-pow
N/A
lift-pow.f64
N/A
sqr-pow
N/A
pow-prod-down
N/A
metadata-eval
N/A
sqr-pow
N/A
pow-prod-down
N/A
pow-pow
N/A
lower-pow.f64
N/A
metadata-eval
N/A
lift-/.f64
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
N/A
metadata-eval
99.4
Applied rewrites99.4%
herbie shell --seed 1
(FPCore (a)
:name "sqrt(a)/pow(2, 1/4)"
:precision binary64
:pre (and (<= 0.003 a) (<= a 1.0))
(/ (sqrt a) (pow 2.0 (/ 1.0 4.0))))