
(FPCore (x) :precision binary64 (- 1.0 (sin (* 2.0 x))))
double code(double x) {
return 1.0 - sin((2.0 * x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 - sin((2.0d0 * x))
end function
public static double code(double x) {
return 1.0 - Math.sin((2.0 * x));
}
def code(x): return 1.0 - math.sin((2.0 * x))
function code(x) return Float64(1.0 - sin(Float64(2.0 * x))) end
function tmp = code(x) tmp = 1.0 - sin((2.0 * x)); end
code[x_] := N[(1.0 - N[Sin[N[(2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \sin \left(2 \cdot x\right)
Herbie found 2 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (- 1.0 (sin (* 2.0 x))))
double code(double x) {
return 1.0 - sin((2.0 * x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 - sin((2.0d0 * x))
end function
public static double code(double x) {
return 1.0 - Math.sin((2.0 * x));
}
def code(x): return 1.0 - math.sin((2.0 * x))
function code(x) return Float64(1.0 - sin(Float64(2.0 * x))) end
function tmp = code(x) tmp = 1.0 - sin((2.0 * x)); end
code[x_] := N[(1.0 - N[Sin[N[(2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \sin \left(2 \cdot x\right)
(FPCore (x) :precision binary64 (- 1.0 (sin (+ x x))))
double code(double x) {
return 1.0 - sin((x + x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 - sin((x + x))
end function
public static double code(double x) {
return 1.0 - Math.sin((x + x));
}
def code(x): return 1.0 - math.sin((x + x))
function code(x) return Float64(1.0 - sin(Float64(x + x))) end
function tmp = code(x) tmp = 1.0 - sin((x + x)); end
code[x_] := N[(1.0 - N[Sin[N[(x + x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \sin \left(x + x\right)
Initial program 99.4%
lift-*.f64N/A
count-2-revN/A
lower-+.f6499.4%
Applied rewrites99.4%
(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
1
Initial program 99.4%
Taylor expanded in x around 0
Applied rewrites59.2%
herbie shell --seed 1
(FPCore (x)
:name "(- 1 (sin (* 2 x)))"
:precision binary64
(- 1.0 (sin (* 2.0 x))))