(FPCore (k) :precision binary64 (+ (+ (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (/ k 256.0)))) (- (sin (+ (* (/ 1.0 256.0) (* 2.0 PI)) (* 2.0 PI)))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 2.0 (/ k 256.0))))) (- (sin (+ (* (/ 2.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 3.0 (/ k 256.0))))) (- (sin (+ (* (/ 3.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))))
double code(double k) { return (((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (k / 256.0)))) * -sin((((1.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI)))))) + ((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (2.0 * (k / 256.0))))) * -sin((((2.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI))))))) + ((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (3.0 * (k / 256.0))))) * -sin((((3.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI)))))); }
public static double code(double k) { return (((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (k / 256.0)))) * -Math.sin((((1.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI))))) + ((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (2.0 * (k / 256.0))))) * -Math.sin((((2.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI)))))) + ((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (3.0 * (k / 256.0))))) * -Math.sin((((3.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI))))); }
def code(k): return (((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (k / 256.0)))) * -math.sin((((1.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi))))) + ((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (2.0 * (k / 256.0))))) * -math.sin((((2.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi)))))) + ((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (3.0 * (k / 256.0))))) * -math.sin((((3.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi)))))
function code(k) return Float64(Float64(Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(k / 256.0)))) * Float64(-sin(Float64(Float64(Float64(1.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi)))))) + Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(2.0 * Float64(k / 256.0))))) * Float64(-sin(Float64(Float64(Float64(2.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi))))))) + Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(3.0 * Float64(k / 256.0))))) * Float64(-sin(Float64(Float64(Float64(3.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi))))))) end
function tmp = code(k) tmp = (((1.0 / 256.0) * (sin((-2.0 * (pi * (k / 256.0)))) * -sin((((1.0 / 256.0) * (2.0 * pi)) + (2.0 * pi))))) + ((1.0 / 256.0) * (sin((-2.0 * (pi * (2.0 * (k / 256.0))))) * -sin((((2.0 / 256.0) * (2.0 * pi)) + (2.0 * pi)))))) + ((1.0 / 256.0) * (sin((-2.0 * (pi * (3.0 * (k / 256.0))))) * -sin((((3.0 / 256.0) * (2.0 * pi)) + (2.0 * pi))))); end
code[k_] := N[(N[(N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(1.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(2.0 * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(2.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(3.0 * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(3.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\left(\frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \frac{k}{256}\right)\right) \cdot \left(-\sin \left(\frac{1}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right) + \frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \left(2 \cdot \frac{k}{256}\right)\right)\right) \cdot \left(-\sin \left(\frac{2}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right)\right) + \frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \left(3 \cdot \frac{k}{256}\right)\right)\right) \cdot \left(-\sin \left(\frac{3}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right)
Herbie found 6 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (k) :precision binary64 (+ (+ (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (/ k 256.0)))) (- (sin (+ (* (/ 1.0 256.0) (* 2.0 PI)) (* 2.0 PI)))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 2.0 (/ k 256.0))))) (- (sin (+ (* (/ 2.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 3.0 (/ k 256.0))))) (- (sin (+ (* (/ 3.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))))
double code(double k) { return (((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (k / 256.0)))) * -sin((((1.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI)))))) + ((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (2.0 * (k / 256.0))))) * -sin((((2.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI))))))) + ((1.0 / 256.0) * (sin((-2.0 * (((double) M_PI) * (3.0 * (k / 256.0))))) * -sin((((3.0 / 256.0) * (2.0 * ((double) M_PI))) + (2.0 * ((double) M_PI)))))); }
public static double code(double k) { return (((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (k / 256.0)))) * -Math.sin((((1.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI))))) + ((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (2.0 * (k / 256.0))))) * -Math.sin((((2.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI)))))) + ((1.0 / 256.0) * (Math.sin((-2.0 * (Math.PI * (3.0 * (k / 256.0))))) * -Math.sin((((3.0 / 256.0) * (2.0 * Math.PI)) + (2.0 * Math.PI))))); }
def code(k): return (((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (k / 256.0)))) * -math.sin((((1.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi))))) + ((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (2.0 * (k / 256.0))))) * -math.sin((((2.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi)))))) + ((1.0 / 256.0) * (math.sin((-2.0 * (math.pi * (3.0 * (k / 256.0))))) * -math.sin((((3.0 / 256.0) * (2.0 * math.pi)) + (2.0 * math.pi)))))
function code(k) return Float64(Float64(Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(k / 256.0)))) * Float64(-sin(Float64(Float64(Float64(1.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi)))))) + Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(2.0 * Float64(k / 256.0))))) * Float64(-sin(Float64(Float64(Float64(2.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi))))))) + Float64(Float64(1.0 / 256.0) * Float64(sin(Float64(Float64(-2.0) * Float64(pi * Float64(3.0 * Float64(k / 256.0))))) * Float64(-sin(Float64(Float64(Float64(3.0 / 256.0) * Float64(2.0 * pi)) + Float64(2.0 * pi))))))) end
function tmp = code(k) tmp = (((1.0 / 256.0) * (sin((-2.0 * (pi * (k / 256.0)))) * -sin((((1.0 / 256.0) * (2.0 * pi)) + (2.0 * pi))))) + ((1.0 / 256.0) * (sin((-2.0 * (pi * (2.0 * (k / 256.0))))) * -sin((((2.0 / 256.0) * (2.0 * pi)) + (2.0 * pi)))))) + ((1.0 / 256.0) * (sin((-2.0 * (pi * (3.0 * (k / 256.0))))) * -sin((((3.0 / 256.0) * (2.0 * pi)) + (2.0 * pi))))); end
code[k_] := N[(N[(N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(1.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(2.0 * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(2.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 / 256.0), $MachinePrecision] * N[(N[Sin[N[((-2.0) * N[(Pi * N[(3.0 * N[(k / 256.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * (-N[Sin[N[(N[(N[(3.0 / 256.0), $MachinePrecision] * N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision] + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision])), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\left(\frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \frac{k}{256}\right)\right) \cdot \left(-\sin \left(\frac{1}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right) + \frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \left(2 \cdot \frac{k}{256}\right)\right)\right) \cdot \left(-\sin \left(\frac{2}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right)\right) + \frac{1}{256} \cdot \left(\sin \left(\left(-2\right) \cdot \left(\pi \cdot \left(3 \cdot \frac{k}{256}\right)\right)\right) \cdot \left(-\sin \left(\frac{3}{256} \cdot \left(2 \cdot \pi\right) + 2 \cdot \pi\right)\right)\right)
(FPCore (k) :precision binary64 (* 0.00390625 (fma -0.07356456359966781 (sin (* -2.0 (* (* 0.01171875 k) PI))) (fma (sin (* 2.015625 PI)) (sin (* (* (* 0.0078125 k) PI) 2.0)) (* (sin (* -2.0078125 PI)) (sin (* -2.0 (* (* 0.00390625 k) PI))))))))
double code(double k) { return 0.00390625 * fma(-0.07356456359966781, sin((-2.0 * ((0.01171875 * k) * ((double) M_PI)))), fma(sin((2.015625 * ((double) M_PI))), sin((((0.0078125 * k) * ((double) M_PI)) * 2.0)), (sin((-2.0078125 * ((double) M_PI))) * sin((-2.0 * ((0.00390625 * k) * ((double) M_PI))))))); }
function code(k) return Float64(0.00390625 * fma(-0.07356456359966781, sin(Float64(-2.0 * Float64(Float64(0.01171875 * k) * pi))), fma(sin(Float64(2.015625 * pi)), sin(Float64(Float64(Float64(0.0078125 * k) * pi) * 2.0)), Float64(sin(Float64(-2.0078125 * pi)) * sin(Float64(-2.0 * Float64(Float64(0.00390625 * k) * pi))))))) end
code[k_] := N[(0.00390625 * N[(-0.07356456359966781 * N[Sin[N[(-2.0 * N[(N[(0.01171875 * k), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[(N[Sin[N[(2.015625 * Pi), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(N[(N[(0.0078125 * k), $MachinePrecision] * Pi), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] + N[(N[Sin[N[(-2.0078125 * Pi), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(-2.0 * N[(N[(0.00390625 * k), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
0.00390625 \cdot \mathsf{fma}\left(-0.07356456359966781, \sin \left(-2 \cdot \left(\left(0.01171875 \cdot k\right) \cdot \pi\right)\right), \mathsf{fma}\left(\sin \left(2.015625 \cdot \pi\right), \sin \left(\left(\left(0.0078125 \cdot k\right) \cdot \pi\right) \cdot 2\right), \sin \left(-2.0078125 \cdot \pi\right) \cdot \sin \left(-2 \cdot \left(\left(0.00390625 \cdot k\right) \cdot \pi\right)\right)\right)\right)
Initial program 91.2%
Evaluated real constant99.4%
Applied rewrites99.5%
Evaluated real constant99.5%
(FPCore (k) :precision binary64 (* 0.00390625 (fma -0.07356456359966781 (sin (* -0.0234375 (* k PI))) (fma (sin (* -2.0078125 PI)) (sin (* -0.0078125 (* k PI))) (* (sin (* 0.015625 (* k PI))) (sin (* 2.015625 PI)))))))
double code(double k) { return 0.00390625 * fma(-0.07356456359966781, sin((-0.0234375 * (k * ((double) M_PI)))), fma(sin((-2.0078125 * ((double) M_PI))), sin((-0.0078125 * (k * ((double) M_PI)))), (sin((0.015625 * (k * ((double) M_PI)))) * sin((2.015625 * ((double) M_PI)))))); }
function code(k) return Float64(0.00390625 * fma(-0.07356456359966781, sin(Float64(-0.0234375 * Float64(k * pi))), fma(sin(Float64(-2.0078125 * pi)), sin(Float64(-0.0078125 * Float64(k * pi))), Float64(sin(Float64(0.015625 * Float64(k * pi))) * sin(Float64(2.015625 * pi)))))) end
code[k_] := N[(0.00390625 * N[(-0.07356456359966781 * N[Sin[N[(-0.0234375 * N[(k * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[(N[Sin[N[(-2.0078125 * Pi), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(-0.0078125 * N[(k * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[(N[Sin[N[(0.015625 * N[(k * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[Sin[N[(2.015625 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
0.00390625 \cdot \mathsf{fma}\left(-0.07356456359966781, \sin \left(-0.0234375 \cdot \left(k \cdot \pi\right)\right), \mathsf{fma}\left(\sin \left(-2.0078125 \cdot \pi\right), \sin \left(-0.0078125 \cdot \left(k \cdot \pi\right)\right), \sin \left(0.015625 \cdot \left(k \cdot \pi\right)\right) \cdot \sin \left(2.015625 \cdot \pi\right)\right)\right)
Initial program 91.2%
Evaluated real constant99.4%
Applied rewrites99.5%
Evaluated real constant99.5%
Taylor expanded in k around inf
lower-fma.f64
N/A
lower-sin.f64
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-fma.f64
N/A
Applied rewrites99.4%
(FPCore (k) :precision binary64 (* 0.00390625 (fma -0.07356456359966781 (sin (* -2.0 (* (* 0.01171875 k) PI))) (* k (fma -0.0078125 (* PI (sin (* -2.0078125 PI))) (* 0.015625 (* PI (sin (* 2.015625 PI)))))))))
double code(double k) { return 0.00390625 * fma(-0.07356456359966781, sin((-2.0 * ((0.01171875 * k) * ((double) M_PI)))), (k * fma(-0.0078125, (((double) M_PI) * sin((-2.0078125 * ((double) M_PI)))), (0.015625 * (((double) M_PI) * sin((2.015625 * ((double) M_PI)))))))); }
function code(k) return Float64(0.00390625 * fma(-0.07356456359966781, sin(Float64(-2.0 * Float64(Float64(0.01171875 * k) * pi))), Float64(k * fma(-0.0078125, Float64(pi * sin(Float64(-2.0078125 * pi))), Float64(0.015625 * Float64(pi * sin(Float64(2.015625 * pi)))))))) end
code[k_] := N[(0.00390625 * N[(-0.07356456359966781 * N[Sin[N[(-2.0 * N[(N[(0.01171875 * k), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[(k * N[(-0.0078125 * N[(Pi * N[Sin[N[(-2.0078125 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[(0.015625 * N[(Pi * N[Sin[N[(2.015625 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
0.00390625 \cdot \mathsf{fma}\left(-0.07356456359966781, \sin \left(-2 \cdot \left(\left(0.01171875 \cdot k\right) \cdot \pi\right)\right), k \cdot \mathsf{fma}\left(-0.0078125, \pi \cdot \sin \left(-2.0078125 \cdot \pi\right), 0.015625 \cdot \left(\pi \cdot \sin \left(2.015625 \cdot \pi\right)\right)\right)\right)
Initial program 91.2%
Evaluated real constant99.4%
Applied rewrites99.5%
Evaluated real constant99.5%
Taylor expanded in k around 0
lower-*.f64
N/A
lower-fma.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-sin.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-sin.f64
N/A
lower-*.f64
N/A
Applied rewrites98.3%
(FPCore (k) :precision binary64 (+ (* (fma (* 3.0517578125e-5 PI) (sin (* 2.0078125 PI)) (* (* 6.103515625e-5 PI) (sin (* 2.015625 PI)))) k) (* (* (* (sin 6.356816384998098) PI) k) 9.1552734375e-5)))
double code(double k) { return (fma((3.0517578125e-5 * ((double) M_PI)), sin((2.0078125 * ((double) M_PI))), ((6.103515625e-5 * ((double) M_PI)) * sin((2.015625 * ((double) M_PI))))) * k) + (((sin(6.356816384998098) * ((double) M_PI)) * k) * 9.1552734375e-5); }
function code(k) return Float64(Float64(fma(Float64(3.0517578125e-5 * pi), sin(Float64(2.0078125 * pi)), Float64(Float64(6.103515625e-5 * pi) * sin(Float64(2.015625 * pi)))) * k) + Float64(Float64(Float64(sin(6.356816384998098) * pi) * k) * 9.1552734375e-5)) end
code[k_] := N[(N[(N[(N[(3.0517578125e-5 * Pi), $MachinePrecision] * N[Sin[N[(2.0078125 * Pi), $MachinePrecision]], $MachinePrecision] + N[(N[(6.103515625e-5 * Pi), $MachinePrecision] * N[Sin[N[(2.015625 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * k), $MachinePrecision] + N[(N[(N[(N[Sin[6.356816384998098], $MachinePrecision] * Pi), $MachinePrecision] * k), $MachinePrecision] * 9.1552734375e-5), $MachinePrecision]), $MachinePrecision]
\mathsf{fma}\left(3.0517578125 \cdot 10^{-5} \cdot \pi, \sin \left(2.0078125 \cdot \pi\right), \left(6.103515625 \cdot 10^{-5} \cdot \pi\right) \cdot \sin \left(2.015625 \cdot \pi\right)\right) \cdot k + \left(\left(\sin 6.356816384998098 \cdot \pi\right) \cdot k\right) \cdot 9.1552734375 \cdot 10^{-5}
Initial program 91.2%
Evaluated real constant99.4%
Taylor expanded in k around 0
lower-*.f64
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-sin.f64
98.1%
Applied rewrites98.1%
Taylor expanded in k around 0
metadata-eval
N/A
Applied rewrites98.1%
Applied rewrites98.1%
(FPCore (k) :precision binary64 (+ (* k (fma 3.0517578125e-5 (* PI (sin (fma 0.0078125 PI (* 2.0 PI)))) (* 6.103515625e-5 (* PI (sin (fma 0.015625 PI (* 2.0 PI))))))) (* 9.1552734375e-5 (* k 0.23110989256925552))))
double code(double k) { return (k * fma(3.0517578125e-5, (((double) M_PI) * sin(fma(0.0078125, ((double) M_PI), (2.0 * ((double) M_PI))))), (6.103515625e-5 * (((double) M_PI) * sin(fma(0.015625, ((double) M_PI), (2.0 * ((double) M_PI)))))))) + (9.1552734375e-5 * (k * 0.23110989256925552)); }
function code(k) return Float64(Float64(k * fma(3.0517578125e-5, Float64(pi * sin(fma(0.0078125, pi, Float64(2.0 * pi)))), Float64(6.103515625e-5 * Float64(pi * sin(fma(0.015625, pi, Float64(2.0 * pi))))))) + Float64(9.1552734375e-5 * Float64(k * 0.23110989256925552))) end
code[k_] := N[(N[(k * N[(3.0517578125e-5 * N[(Pi * N[Sin[N[(0.0078125 * Pi + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[(6.103515625e-5 * N[(Pi * N[Sin[N[(0.015625 * Pi + N[(2.0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(9.1552734375e-5 * N[(k * 0.23110989256925552), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
k \cdot \mathsf{fma}\left(3.0517578125 \cdot 10^{-5}, \pi \cdot \sin \left(\mathsf{fma}\left(0.0078125, \pi, 2 \cdot \pi\right)\right), 6.103515625 \cdot 10^{-5} \cdot \left(\pi \cdot \sin \left(\mathsf{fma}\left(0.015625, \pi, 2 \cdot \pi\right)\right)\right)\right) + 9.1552734375 \cdot 10^{-5} \cdot \left(k \cdot 0.23110989256925552\right)
Initial program 91.2%
Evaluated real constant99.4%
Taylor expanded in k around 0
lower-*.f64
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
lower-sin.f64
98.1%
Applied rewrites98.1%
Taylor expanded in k around 0
metadata-eval
N/A
Applied rewrites98.1%
Evaluated real constant98.1%
(FPCore (k) :precision binary64 (* k 3.2920212137967474e-5))
double code(double k) { return k * 3.2920212137967474e-5; }
real(8) function code(k) real(8), intent (in) :: k code = k * 3.2920212137967474d-5 end function
public static double code(double k) { return k * 3.2920212137967474e-5; }
def code(k): return k * 3.2920212137967474e-5
function code(k) return Float64(k * 3.2920212137967474e-5) end
function tmp = code(k) tmp = k * 3.2920212137967474e-5; end
code[k_] := N[(k * 3.2920212137967474e-5), $MachinePrecision]
k \cdot 3.2920212137967474 \cdot 10^{-5}
Initial program 91.2%
Taylor expanded in k around 0
lower-*.f64
N/A
Applied rewrites90.0%
Evaluated real constant97.7%
herbie shell --seed 1
(FPCore (k)
:name "1/256 sin(-2 PI k / 256) (-sin(1/256 (2 PI) + 2 PI)) + 1/256 sin(-2 PI 2 k / 256) (-sin(2/256 (2 PI) + 2 PI)) + 1/256 sin(-2 PI 3 k / 256) (-sin(3/256 (2 PI) + 2 PI))"
:precision binary64
:pre (and (<= 0.0 k) (<= k 256.0))
(+ (+ (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (/ k 256.0)))) (- (sin (+ (* (/ 1.0 256.0) (* 2.0 PI)) (* 2.0 PI)))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 2.0 (/ k 256.0))))) (- (sin (+ (* (/ 2.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))) (* (/ 1.0 256.0) (* (sin (* (- 2.0) (* PI (* 3.0 (/ k 256.0))))) (- (sin (+ (* (/ 3.0 256.0) (* 2.0 PI)) (* 2.0 PI))))))))