1 function Y = sin_sym(X)
2 %
function Y = sin_sym(X)
4 % sine
function guaranteeing exact floating-point symmetry
5 % i.e. sin(x) = sin(x+2*pi) = - sin(-x)
8 % sin(0.1) + sin(0.1+pi) = 4.1633e-17
9 % sin_sym(0.1) + sin_sym(0.1+pi) = 4.1633e-17
11 % Bernard Haasdonk 5.6.2008
13 % averaging over 4 periods:
15 %generate large lookuptable
19 xvals = 0:step:(pi-1e-10);
20 if length(xvals)~=resolution;
21 error(
'check length of table!!');
24 sin_tab = [sin_tab, 0];
25 sin_tab(1:end) = 0.5*(sin_tab(1:end)+ sin_tab(end:-1:1));
27 % map X to interval [0,pi)
30 odd_n = mod(n,2); % 0 => no flip => 1 flip
46 % old version with averaging, that does not give better results:
47 %Yplus = sin(X) + sin(X+2*pi)+ sin(X-2*pi)+ X(X+4*pi);
48 %Yminus = sin(X-pi) + sin(X-3*pi) + sin(X+pi)+sin(X+3*pi);
49 %Y = (Yplus - Yminus)/6;
52 % TO BE ADJUSTED TO NEW SYNTAX