(FPCore (r) :precision binary64 (* (PI) (pow r 2.0)))
\begin{array}{l} \\ \mathsf{PI}\left(\right) \cdot {r}^{2} \end{array}
Sampling outcomes in binary64 precision:
Herbie found 3 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (r) :precision binary64 (* (PI) (pow r 2.0)))
\begin{array}{l} \\ \mathsf{PI}\left(\right) \cdot {r}^{2} \end{array}
(FPCore (r) :precision binary64 (* (* r r) (PI)))
\begin{array}{l} \\ \left(r \cdot r\right) \cdot \mathsf{PI}\left(\right) \end{array}
Initial program 99.8%
Applied rewrites99.8%
(FPCore (r) :precision binary64 (* (* (PI) r) r))
\begin{array}{l} \\ \left(\mathsf{PI}\left(\right) \cdot r\right) \cdot r \end{array}
Initial program 99.8%
Taylor expanded in r around 0
*-commutative
N/A
unpow2
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
99.7
Applied rewrites99.7%
(FPCore (r) :precision binary64 (* r r))
double code(double r) { return r * r; }
real(8) function code(r) real(8), intent (in) :: r code = r * r end function
public static double code(double r) { return r * r; }
def code(r): return r * r
function code(r) return Float64(r * r) end
function tmp = code(r) tmp = r * r; end
code[r_] := N[(r * r), $MachinePrecision]
\begin{array}{l} \\ r \cdot r \end{array}
Initial program 99.8%
Applied rewrites59.2%
herbie shell --seed 1
(FPCore (r)
:name "PI*r^2"
:precision binary64
:pre (and (<= 0.0 r) (<= r 1.79e+308))
(* (PI) (pow r 2.0)))