Hello, I found your webpage 'Fun with sinusoïds', particulary the approximation with parabol segments. I made some tests with higer degrees, with terms in x^2, x^4 and x^6, I optain a maximal error smaller than 1.5*10^-5 for an amplitude of 1. This is a maximal error of one LSB in 16bit audio. Adding a term in x^8 would make it exact for 16bit audio with just two multiplications more... Here is my test code in c I used in a Pure Data external. It compute a sine or a cosine with a period of one, between 0 and 1. (Other constants would of course make it possible also for a period of 2*pi ): Regards Basile Graf //CODE: //---------------------------------------------------- #define COEFF0 1 //POSITIVE!! #define COEFF2 19.73640067359408 //NEGATIVE!! #define COEFF4 64.66421708408689 //POSITIVE!! #define COEFF6 78.10890090530666 //NEGATIVE!! float x2_poly_6, x4_poly_6; static __inline t_float sinpoly6(t_float x) { if (x<=0.5) { x-=0.25; x2_poly_6 = x*x; x4_poly_6 = x2_poly_6*x2_poly_6; return COEFF0 - COEFF2*x2_poly_6 + COEFF4*x4_poly_6 - COEFF6*x2_poly_6*x4_poly_6; } else { x-=.75; x2_poly_6 = x*x; x4_poly_6 = x2_poly_6*x2_poly_6; return -COEFF0 + COEFF2*x2_poly_6 - COEFF4*x4_poly_6 + COEFF6*x2_poly_6*x4_poly_6; } } static __inline float cospoly6(float x) { if (x<=0.25) { x2_poly_6 = x*x; x4_poly_6 = x2_poly_6*x2_poly_6; return COEFF0 - COEFF2*x2_poly_6 + COEFF4*x4_poly_6 - COEFF6*x2_poly_6*x4_poly_6; } else if (x>=.75) { x-=1; x2_poly_6 = x*x; x4_poly_6 = x2_poly_6*x2_poly_6; return COEFF0 - COEFF2*x2_poly_6 + COEFF4*x4_poly_6 - COEFF6*x2_poly_6*x4_poly_6; } else { x-=0.5; x2_poly_6 = x*x; x4_poly_6 = x2_poly_6*x2_poly_6; return -COEFF0 + COEFF2*x2_poly_6 - COEFF4*x4_poly_6 + COEFF6*x2_poly_6*x4_poly_6; } }