
(FPCore (a b) :precision binary64 (* (* (/ (PI) 2.0) (/ 1.0 (- (* b b) (* a a)))) (- (/ 1.0 a) (/ 1.0 b))))
\begin{array}{l}
\\
\left(\frac{\mathsf{PI}\left(\right)}{2} \cdot \frac{1}{b \cdot b - a \cdot a}\right) \cdot \left(\frac{1}{a} - \frac{1}{b}\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a b) :precision binary64 (* (* (/ (PI) 2.0) (/ 1.0 (- (* b b) (* a a)))) (- (/ 1.0 a) (/ 1.0 b))))
\begin{array}{l}
\\
\left(\frac{\mathsf{PI}\left(\right)}{2} \cdot \frac{1}{b \cdot b - a \cdot a}\right) \cdot \left(\frac{1}{a} - \frac{1}{b}\right)
\end{array}
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (if (<= a -6.2e+95) (* (/ (PI) a) (/ 0.5 (* a b))) (/ (* (PI) 0.5) (* b (* a (+ a b))))))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\begin{array}{l}
\mathbf{if}\;a \leq -6.2 \cdot 10^{+95}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right)}{a} \cdot \frac{0.5}{a \cdot b}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right) \cdot 0.5}{b \cdot \left(a \cdot \left(a + b\right)\right)}\\
\end{array}
\end{array}
if a < -6.2000000000000006e95Initial program 54.5%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6478.0
Applied rewrites78.0%
Applied rewrites99.9%
if -6.2000000000000006e95 < a Initial program 80.7%
lift-*.f64N/A
*-commutativeN/A
lift--.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-subN/A
lift-*.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites85.5%
lift-/.f64N/A
clear-numN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
times-fracN/A
lift-*.f64N/A
lift-+.f64N/A
lift--.f64N/A
+-commutativeN/A
difference-of-squaresN/A
lift--.f64N/A
flip-+N/A
+-commutativeN/A
lift-+.f64N/A
lift-*.f64N/A
metadata-evalN/A
div-invN/A
associate-/r*N/A
*-commutativeN/A
Applied rewrites99.6%
lift-/.f64N/A
lift-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-*r/N/A
lift-/.f64N/A
frac-timesN/A
*-commutativeN/A
lift-PI.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-/.f64N/A
lift-PI.f64N/A
lower-*.f64N/A
*-commutativeN/A
associate-*l*N/A
distribute-rgt-outN/A
lower-*.f64N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-+.f6494.5
Applied rewrites94.5%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (if (<= a -1.7e+92) (* (PI) (/ 0.5 (* (* b a) a))) (/ (* (PI) 0.5) (* b (* a (+ a b))))))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\begin{array}{l}
\mathbf{if}\;a \leq -1.7 \cdot 10^{+92}:\\
\;\;\;\;\mathsf{PI}\left(\right) \cdot \frac{0.5}{\left(b \cdot a\right) \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right) \cdot 0.5}{b \cdot \left(a \cdot \left(a + b\right)\right)}\\
\end{array}
\end{array}
if a < -1.6999999999999999e92Initial program 55.3%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6478.4
Applied rewrites78.4%
Applied rewrites78.4%
Applied rewrites96.3%
if -1.6999999999999999e92 < a Initial program 80.6%
lift-*.f64N/A
*-commutativeN/A
lift--.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-subN/A
lift-*.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites85.4%
lift-/.f64N/A
clear-numN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
times-fracN/A
lift-*.f64N/A
lift-+.f64N/A
lift--.f64N/A
+-commutativeN/A
difference-of-squaresN/A
lift--.f64N/A
flip-+N/A
+-commutativeN/A
lift-+.f64N/A
lift-*.f64N/A
metadata-evalN/A
div-invN/A
associate-/r*N/A
*-commutativeN/A
Applied rewrites99.6%
lift-/.f64N/A
lift-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-*r/N/A
lift-/.f64N/A
frac-timesN/A
*-commutativeN/A
lift-PI.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-/.f64N/A
lift-PI.f64N/A
lower-*.f64N/A
*-commutativeN/A
associate-*l*N/A
distribute-rgt-outN/A
lower-*.f64N/A
distribute-rgt-outN/A
lower-*.f64N/A
lower-+.f6494.5
Applied rewrites94.5%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (/ (* (/ 0.5 (* b a)) (PI)) (+ b a)))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\frac{\frac{0.5}{b \cdot a} \cdot \mathsf{PI}\left(\right)}{b + a}
\end{array}
Initial program 75.5%
lift-*.f64N/A
*-commutativeN/A
lift--.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-subN/A
lift-*.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites83.6%
lift-/.f64N/A
clear-numN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
times-fracN/A
lift-*.f64N/A
lift-+.f64N/A
lift--.f64N/A
+-commutativeN/A
difference-of-squaresN/A
lift--.f64N/A
flip-+N/A
+-commutativeN/A
lift-+.f64N/A
lift-*.f64N/A
metadata-evalN/A
div-invN/A
associate-/r*N/A
*-commutativeN/A
Applied rewrites99.7%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (/ 0.5 (* (* a b) (/ (+ a b) (PI)))))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\frac{0.5}{\left(a \cdot b\right) \cdot \frac{a + b}{\mathsf{PI}\left(\right)}}
\end{array}
Initial program 75.5%
lift-*.f64N/A
*-commutativeN/A
lift--.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-subN/A
lift-*.f64N/A
lift-/.f64N/A
lift-/.f64N/A
frac-timesN/A
frac-timesN/A
lower-/.f64N/A
Applied rewrites83.6%
lift-/.f64N/A
clear-numN/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
times-fracN/A
lift-*.f64N/A
lift-+.f64N/A
lift--.f64N/A
+-commutativeN/A
difference-of-squaresN/A
lift--.f64N/A
flip-+N/A
+-commutativeN/A
lift-+.f64N/A
lift-*.f64N/A
metadata-evalN/A
div-invN/A
associate-/r*N/A
*-commutativeN/A
Applied rewrites99.7%
lift-/.f64N/A
lift-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-*r/N/A
lift-/.f64N/A
clear-numN/A
frac-timesN/A
metadata-evalN/A
lower-/.f64N/A
lower-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-+.f6499.1
Applied rewrites99.1%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (if (<= a -1.12e-33) (* (/ (PI) (* (* a b) a)) 0.5) (* (/ (PI) (* (* a b) b)) 0.5)))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\begin{array}{l}
\mathbf{if}\;a \leq -1.12 \cdot 10^{-33}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right)}{\left(a \cdot b\right) \cdot a} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right)}{\left(a \cdot b\right) \cdot b} \cdot 0.5\\
\end{array}
\end{array}
if a < -1.11999999999999999e-33Initial program 69.3%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6480.1
Applied rewrites80.1%
Applied rewrites92.2%
if -1.11999999999999999e-33 < a Initial program 78.1%
Applied rewrites88.4%
Taylor expanded in a around 0
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f6466.7
Applied rewrites66.7%
Applied rewrites72.9%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (if (<= a -1.1e-33) (* (/ (PI) (* (* a b) a)) 0.5) (* (/ (PI) (* (* b b) a)) 0.5)))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\begin{array}{l}
\mathbf{if}\;a \leq -1.1 \cdot 10^{-33}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right)}{\left(a \cdot b\right) \cdot a} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{PI}\left(\right)}{\left(b \cdot b\right) \cdot a} \cdot 0.5\\
\end{array}
\end{array}
if a < -1.10000000000000003e-33Initial program 69.3%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6480.1
Applied rewrites80.1%
Applied rewrites92.2%
if -1.10000000000000003e-33 < a Initial program 78.1%
Taylor expanded in a around 0
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f6466.7
Applied rewrites66.7%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (* (/ (PI) (* (* a b) a)) 0.5))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\frac{\mathsf{PI}\left(\right)}{\left(a \cdot b\right) \cdot a} \cdot 0.5
\end{array}
Initial program 75.5%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6459.3
Applied rewrites59.3%
Applied rewrites66.8%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (* (PI) (/ 0.5 (* (* b a) a))))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\mathsf{PI}\left(\right) \cdot \frac{0.5}{\left(b \cdot a\right) \cdot a}
\end{array}
Initial program 75.5%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6459.3
Applied rewrites59.3%
Applied rewrites59.3%
Applied rewrites66.8%
NOTE: a and b should be sorted in increasing order before calling this function. (FPCore (a b) :precision binary64 (* (PI) (/ 0.5 (* (* a a) b))))
\begin{array}{l}
[a, b] = \mathsf{sort}([a, b])\\
\\
\mathsf{PI}\left(\right) \cdot \frac{0.5}{\left(a \cdot a\right) \cdot b}
\end{array}
Initial program 75.5%
Taylor expanded in a around inf
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6459.3
Applied rewrites59.3%
Applied rewrites59.3%
herbie shell --seed 2024313
(FPCore (a b)
:name "NMSE Section 6.1 mentioned, B"
:precision binary64
(* (* (/ (PI) 2.0) (/ 1.0 (- (* b b) (* a a)))) (- (/ 1.0 a) (/ 1.0 b))))