(FPCore (x) :precision binary64 (+ (* (sin x) (sin x)) (* (cos x) (cos x))))
double code(double x) { return (sin(x) * sin(x)) + (cos(x) * cos(x)); }
real(8) function code(x) real(8), intent (in) :: x code = (sin(x) * sin(x)) + (cos(x) * cos(x)) end function
public static double code(double x) { return (Math.sin(x) * Math.sin(x)) + (Math.cos(x) * Math.cos(x)); }
def code(x): return (math.sin(x) * math.sin(x)) + (math.cos(x) * math.cos(x))
function code(x) return Float64(Float64(sin(x) * sin(x)) + Float64(cos(x) * cos(x))) end
function tmp = code(x) tmp = (sin(x) * sin(x)) + (cos(x) * cos(x)); end
code[x_] := N[(N[(N[Sin[x], $MachinePrecision] * N[Sin[x], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[x], $MachinePrecision] * N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \sin x \cdot \sin x + \cos x \cdot \cos x \end{array}
Sampling outcomes in binary64 precision:
Herbie found 1 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (x) :precision binary64 (+ (* (sin x) (sin x)) (* (cos x) (cos x))))
double code(double x) { return (sin(x) * sin(x)) + (cos(x) * cos(x)); }
real(8) function code(x) real(8), intent (in) :: x code = (sin(x) * sin(x)) + (cos(x) * cos(x)) end function
public static double code(double x) { return (Math.sin(x) * Math.sin(x)) + (Math.cos(x) * Math.cos(x)); }
def code(x): return (math.sin(x) * math.sin(x)) + (math.cos(x) * math.cos(x))
function code(x) return Float64(Float64(sin(x) * sin(x)) + Float64(cos(x) * cos(x))) end
function tmp = code(x) tmp = (sin(x) * sin(x)) + (cos(x) * cos(x)); end
code[x_] := N[(N[(N[Sin[x], $MachinePrecision] * N[Sin[x], $MachinePrecision]), $MachinePrecision] + N[(N[Cos[x], $MachinePrecision] * N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \sin x \cdot \sin x + \cos x \cdot \cos x \end{array}
(FPCore (x) :precision binary64 1.0)
double code(double x) { return 1.0; }
real(8) function code(x) real(8), intent (in) :: x code = 1.0d0 end function
public static double code(double x) { return 1.0; }
def code(x): return 1.0
function code(x) return 1.0 end
function tmp = code(x) tmp = 1.0; end
code[x_] := 1.0
\begin{array}{l} \\ 1 \end{array}
Initial program 100.0%
Taylor expanded in x around 0
Applied rewrites100.0%
herbie shell --seed 1
(FPCore (x)
:name "sin(x)*sin(x)+cos(x)*cos(x)"
:precision binary64
:pre (and (<= -1000.0 x) (<= x 1000.0))
(+ (* (sin x) (sin x)) (* (cos x) (cos x))))