
(FPCore (k n) :precision binary64 (* (/ 1.0 (sqrt k)) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0))))
\begin{array}{l}
\\
\frac{1}{\sqrt{k}} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (k n) :precision binary64 (* (/ 1.0 (sqrt k)) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0))))
\begin{array}{l}
\\
\frac{1}{\sqrt{k}} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)}
\end{array}
(FPCore (k n) :precision binary64 (* (pow k -0.5) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0))))
\begin{array}{l}
\\
{k}^{-0.5} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)}
\end{array}
Initial program 99.6%
lift-/.f64N/A
inv-powN/A
lift-sqrt.f64N/A
pow1/2N/A
pow-powN/A
lower-pow.f64N/A
metadata-eval99.6
Applied rewrites99.6%
(FPCore (k n)
:precision binary64
(let* ((t_0
(* (pow (sqrt k) -1.0) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0)))))
(if (<= t_0 5e-227)
0.0
(if (<= t_0 5e+284)
(/ (sqrt (* (* n 2.0) (PI))) (sqrt k))
(/ (pow 0.0 (- k)) (sqrt k))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\sqrt{k}\right)}^{-1} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)}\\
\mathbf{if}\;t\_0 \leq 5 \cdot 10^{-227}:\\
\;\;\;\;0\\
\mathbf{elif}\;t\_0 \leq 5 \cdot 10^{+284}:\\
\;\;\;\;\frac{\sqrt{\left(n \cdot 2\right) \cdot \mathsf{PI}\left(\right)}}{\sqrt{k}}\\
\mathbf{else}:\\
\;\;\;\;\frac{{0}^{\left(-k\right)}}{\sqrt{k}}\\
\end{array}
\end{array}
if (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.99999999999999961e-227Initial program 100.0%
Applied rewrites1.6%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-098.0
Applied rewrites98.0%
Taylor expanded in k around 0
Applied rewrites98.0%
if 4.99999999999999961e-227 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.9999999999999999e284Initial program 99.3%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6471.1
Applied rewrites71.1%
Applied rewrites98.6%
if 4.9999999999999999e284 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) Initial program 100.0%
Applied rewrites100.0%
Taylor expanded in k around inf
associate-*r*N/A
exp-prodN/A
*-commutativeN/A
metadata-evalN/A
mul0-lftN/A
metadata-evalN/A
distribute-rgt1-inN/A
exp-to-powN/A
distribute-rgt1-inN/A
metadata-evalN/A
mul0-lftN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
mul0-lftN/A
metadata-evalN/A
distribute-rgt1-inN/A
lower-pow.f64N/A
Applied rewrites100.0%
Taylor expanded in k around inf
Applied rewrites100.0%
Final simplification98.8%
(FPCore (k n)
:precision binary64
(let* ((t_0
(* (pow (sqrt k) -1.0) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0)))))
(if (<= t_0 5e-227)
0.0
(if (<= t_0 2e+153)
(sqrt (* (/ (* n (PI)) k) 2.0))
(/ (sqrt (+ n n)) (sqrt k))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := {\left(\sqrt{k}\right)}^{-1} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)}\\
\mathbf{if}\;t\_0 \leq 5 \cdot 10^{-227}:\\
\;\;\;\;0\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+153}:\\
\;\;\;\;\sqrt{\frac{n \cdot \mathsf{PI}\left(\right)}{k} \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{n + n}}{\sqrt{k}}\\
\end{array}
\end{array}
if (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.99999999999999961e-227Initial program 100.0%
Applied rewrites1.6%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-098.0
Applied rewrites98.0%
Taylor expanded in k around 0
Applied rewrites98.0%
if 4.99999999999999961e-227 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 2e153Initial program 99.2%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6498.2
Applied rewrites98.2%
Applied rewrites98.6%
if 2e153 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) Initial program 99.8%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f643.4
Applied rewrites3.4%
Applied rewrites38.2%
Applied rewrites8.5%
Final simplification59.4%
(FPCore (k n)
:precision binary64
(if (<=
(* (pow (sqrt k) -1.0) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0)))
5e-227)
0.0
(/ (sqrt (* (* n 2.0) (PI))) (sqrt k))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;{\left(\sqrt{k}\right)}^{-1} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)} \leq 5 \cdot 10^{-227}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(n \cdot 2\right) \cdot \mathsf{PI}\left(\right)}}{\sqrt{k}}\\
\end{array}
\end{array}
if (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.99999999999999961e-227Initial program 100.0%
Applied rewrites1.6%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-098.0
Applied rewrites98.0%
Taylor expanded in k around 0
Applied rewrites98.0%
if 4.99999999999999961e-227 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) Initial program 99.5%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6448.1
Applied rewrites48.1%
Applied rewrites66.4%
Final simplification72.1%
(FPCore (k n)
:precision binary64
(if (<=
(* (pow (sqrt k) -1.0) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0)))
5e-227)
0.0
(sqrt (* (/ (* n (PI)) k) 2.0))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;{\left(\sqrt{k}\right)}^{-1} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)} \leq 5 \cdot 10^{-227}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{n \cdot \mathsf{PI}\left(\right)}{k} \cdot 2}\\
\end{array}
\end{array}
if (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.99999999999999961e-227Initial program 100.0%
Applied rewrites1.6%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-098.0
Applied rewrites98.0%
Taylor expanded in k around 0
Applied rewrites98.0%
if 4.99999999999999961e-227 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) Initial program 99.5%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6448.1
Applied rewrites48.1%
Applied rewrites48.2%
Final simplification57.2%
(FPCore (k n)
:precision binary64
(if (<=
(* (pow (sqrt k) -1.0) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0)))
5e-227)
0.0
(sqrt (* (/ n k) 2.0))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;{\left(\sqrt{k}\right)}^{-1} \cdot {\left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot n\right)}^{\left(\frac{1 - k}{2}\right)} \leq 5 \cdot 10^{-227}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{n}{k} \cdot 2}\\
\end{array}
\end{array}
if (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) < 4.99999999999999961e-227Initial program 100.0%
Applied rewrites1.6%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-098.0
Applied rewrites98.0%
Taylor expanded in k around 0
Applied rewrites98.0%
if 4.99999999999999961e-227 < (*.f64 (/.f64 #s(literal 1 binary64) (sqrt.f64 k)) (pow.f64 (*.f64 (*.f64 #s(literal 2 binary64) (PI.f64)) n) (/.f64 (-.f64 #s(literal 1 binary64) k) #s(literal 2 binary64)))) Initial program 99.5%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6448.1
Applied rewrites48.1%
Applied rewrites66.4%
Applied rewrites10.8%
Final simplification26.4%
(FPCore (k n) :precision binary64 (/ (pow (* (* n 2.0) (PI)) (fma -0.5 k 0.5)) (sqrt k)))
\begin{array}{l}
\\
\frac{{\left(\left(n \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right)}^{\left(\mathsf{fma}\left(-0.5, k, 0.5\right)\right)}}{\sqrt{k}}
\end{array}
Initial program 99.6%
Taylor expanded in k around inf
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
exp-prodN/A
lower-pow.f64N/A
rem-exp-logN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
*-lft-identityN/A
metadata-evalN/A
fp-cancel-sign-sub-invN/A
+-commutativeN/A
distribute-lft-inN/A
Applied rewrites99.6%
lift-*.f64N/A
lift-/.f64N/A
associate-*l/N/A
*-lft-identityN/A
lower-/.f6499.6
Applied rewrites99.6%
(FPCore (k n) :precision binary64 (if (<= k 0.0055) (/ (sqrt (* (* n 2.0) (PI))) (sqrt k)) (/ (pow (+ n n) (fma -0.5 k 0.5)) (sqrt k))))
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;k \leq 0.0055:\\
\;\;\;\;\frac{\sqrt{\left(n \cdot 2\right) \cdot \mathsf{PI}\left(\right)}}{\sqrt{k}}\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(n + n\right)}^{\left(\mathsf{fma}\left(-0.5, k, 0.5\right)\right)}}{\sqrt{k}}\\
\end{array}
\end{array}
if k < 0.0054999999999999997Initial program 99.3%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-sqrt.f64N/A
lower-sqrt.f64N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6471.6
Applied rewrites71.6%
Applied rewrites99.2%
if 0.0054999999999999997 < k Initial program 100.0%
Taylor expanded in k around inf
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
exp-prodN/A
lower-pow.f64N/A
rem-exp-logN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
*-lft-identityN/A
metadata-evalN/A
fp-cancel-sign-sub-invN/A
+-commutativeN/A
distribute-lft-inN/A
Applied rewrites100.0%
lift-*.f64N/A
lift-/.f64N/A
associate-*l/N/A
*-lft-identityN/A
lower-/.f64100.0
Applied rewrites100.0%
Applied rewrites98.6%
(FPCore (k n) :precision binary64 0.0)
double code(double k, double n) {
return 0.0;
}
real(8) function code(k, n)
real(8), intent (in) :: k
real(8), intent (in) :: n
code = 0.0d0
end function
public static double code(double k, double n) {
return 0.0;
}
def code(k, n): return 0.0
function code(k, n) return 0.0 end
function tmp = code(k, n) tmp = 0.0; end
code[k_, n_] := 0.0
\begin{array}{l}
\\
0
\end{array}
Initial program 99.6%
Applied rewrites29.1%
lift-pow.f64N/A
lift-*.f64N/A
mul0-lftN/A
pow-base-019.5
Applied rewrites19.5%
Taylor expanded in k around 0
Applied rewrites19.5%
herbie shell --seed 2024337
(FPCore (k n)
:name "Migdal et al, Equation (51)"
:precision binary64
(* (/ 1.0 (sqrt k)) (pow (* (* 2.0 (PI)) n) (/ (- 1.0 k) 2.0))))