发明内容
本发明的目的是:针对图形处理器对基本三角函数等曲线的求值逼近要求,提出一种结构简单、算法清晰、运算速度快、精度符合要求的求值器。
本发明的目的是这样实现的:一种用于图形处理器的基于三次Bezier函数的正弦函数、余弦函数、正切函数等基本三角函数的求值器,包括一个预处理电路U0、一个控制点选择电路U1、一个Bernstein基函数产生与坐标逼近电路U2以及一个基本三角函数求值器U3;
预处理电路(U0)对输入的自变量值进行预处理,即计算该值中包含的查找表子区间个数,从而获得查找表地址;
控制点选择电路(U1)包括三张查找表,分别针对正弦函数、余弦函数和正切函数。考虑到基本三角函数的对称周期性和图形处理器中对函数值的精度要求,查找表将(0,π/2)划分为16个子区间,即(0,π/32)、(π/32,2π/32)、......、(15π/32,π/2),子区间在查找表中的编址依次为0000、0001、0010、0011、......、1111。每个子区间对应4个控制点V0、V1、V2、V3,控制点坐标的计算方法如下:
将区间表示为[a,b],则V0、V3的坐标为(a,f(a))、(b,f(b)),其中f表示正弦函数、余弦函数、正切函数之一;
参照图2,有
求解得
继而在分别(a,x_int er)、(x_int er,b)范围内按照三阶Bezier函数搜索V1、V2的坐标,分别可得三张查找表为:
//look-up table for sin
lut_sin[0]=32′b00000000000000000000000000000000;
lut_sin[1]=32′b00000000000000000000000000000000;
lut_sin[2]=32′b00000000000000000000100011110101;
lut_sin[3]=32′b00000000000000000000100011110101;
lut_sin[4]=32′b00000000000000000001000011110000;
lut_sin[5]=32′b00000000000000000001000011110000;
lut_sin[6]=32′b00000000000000000001100100100001;
lut sin[7]=32′b00000000000000000001100100010111;
lut_sin[8]=32′b00000000000000000001100100100001;
lut_sin[9]=32′b00000000000000000001100100010111;
lut_sin[10]=32′b00000000000000000010001110100000;
lut_sin[11]=32′b00000000000000000010001110001001;
lut sin[12]=32′b00000000000000000010101110011100;
lut sin[13]=32′b00000000000000000010101101101010;
lut_sin[14]=32′b00000000000000000011001001000011;
lut_sin[15]=32′b00000000000000000011000111110001;
lut_sin[16]=32′b00000000000000000011001001000011;
lut_sin[17]=32′b00000000000000000011000111110001;
lut_sin[18]=32′b00000000000000000011101110111100;
lut_sin[19]=32′b00000000000000000011101100111011;
lut_sin[20]=32′b00000000000000000100001111111001;
lut_sin[21]=32′b00000000000000000100001100110101;
lut_sin[22]=32′b00000000000000000100101101100101;
lut_sin[23]=32′b00000000000000000100101001010000;
lut_sin[24]=32′b00000000000000000100101101100101;
lut_sin[25]=32′b00000000000000000100101001010000;
lut_sin[26]=32′b00000000000000000101001100010100;
lut_sin[27]=32′b00000000000000000101000110101001;
lut_sin[28]=32′b00000000000000000101101110010010;
lut_sin[29]=32′b00000000000000000101100110110000;
lut_sin[30]=32′b00000000000000000110010010000111;
lut_sin[31]=32′b00000000000000000110000111110111;
lut_sin[32]=32′b00000000000000000110010010000111;
lut_sin[33]=32′b00000000000000000110000111110111;
lut_sin[34]=32′b00000000000000000110101011101110;
lut_sin[35]=32′b00000000000000000110011111100001;
lut_sin[36]=32′b00000000000000000111001110101110;
lut_sin[37]=32′b00000000000000000110111111011111;
lut_sin[38]=32′b00000000000000000111110110101001;
lut_sin[39]=32′b00000000000000000111100010101101;
lut_sin[40]=32′b00000000000000000111110110101001;
lut_sin[41]=32′b00000000000000000111100010101101;
lut_sin[42]=32′b00000000000000001000100110110010;
lut_sin[43]=32′b00000000000000001000001101001001;
lut_sin[44]=32′b00000000000000001001001010110011;
lut_sin[45]=32′b00000000000000001000101011010001;
lut_sin[46]=32′b00000000000000001001011011001011;
lut_sin[47]=32′b00000000000000001000111000111001;
lut_sin[48]=32′b00000000000000001001011011001011;
lut_sin[49]=32′b00000000000000001000111000111001;
lut_sin[50]=32′b00000000000000001001111000111000;
lut_sin[51]=32′b00000000000000001001010001100110;
lut_sin[52]=32′b00000000000000001010011010110110;
lut_sin[53]=32′b00000000000000001001101101000111;
lut_sin[54]=32′b00000000000000001010111111101101;
lut_sin[55]=32′b00000000000000001010001001100111;
lut_sin[56]=32′b00000000000000001010111111101101;
lut_sin[57]=32′b00000000000000001010001001100111;
lut_sin[58]=32′b00000000000000001011011101011010;
lut_sin[59]=32′b00000000000000001010100000100100;
lut_sin[60]=32′b00000000000000001011111111011000;
lut_sin[61]=32′b00000000000000001010111010000000;
lut_sin[62]=32′b00000000000000001100100100001111;
lut_sin[63]=32′b00000000000000001011010100000100;
lut_sin[64]=32′b00000000000000001100100100001111;
lut_sin[65]=32′b00000000000000001011010100000100;
lut_sin[66]=32′b00000000000000001101001011001010;
lut_sin[67]=32′b00000000000000001011101111100101;
lut_sin[68]=32′b00000000000000001101101101001000;
lut_sin[69]=32′b00000000000000001100000110000001;
lut_sin[70]=32′b00000000000000001110001000110001;
lut_sin[71]=32′b00000000000000001100010111100100;
lut_sin[72]=32′b00000000000000001110001000110001;
lut_sin[73]=32′b00000000000000001100010111100100;
lut_sin[74]=32′b00000000000000001110101111101100;
lut_sin[75]=32′b00000000000000001100110000001111;
lut_sin[76]=32′b00000000000000001111010001101010;
lut_sin[77]=32′b00000000000000001101000100000100;
lut_sin[78]=32′b00000000000000001111101101010011;
lut_sin[79]=32′b00000000000000001101010011011011;
lut_sin[80]=32′b00000000000000001111101101010011;
lut_sin[81]=32′b00000000000000001101010011011011;
lut_sin[82]=32′b00000000000000010000001000111101;
lut_sin[83]=32′b00000000000000001101100010110010;
lut_sin[84]=32′b00000000000000010000101010111011;
lut_sin[85]=32′b00000000000000001101110100101111;
lut_sin[86]=32′b00000000000000010001010001110101;
lut_sin[87]=32′b00000000000000001110000111000101;
lut_sin[88]=32′b00000000000000010001010001110101;
lut_sin[89]=32′b00000000000000001110000111000101;
lut_sin[90]=32′b00000000000000010001101110100000;
lut_sin[91]=32′b00000000000000001110010100100110;
lut_sin[92]=32′b00000000000000010010010000011110;
lut_sin[93]=32′b00000000000000001110100011100011;
lut_sin[94]=32′b00000000000000010010110110010111;
lut_sin[95]=32′b00000000000000001110110010000011;
lut_sin[96]=32′b00000000000000010010110110010111;
lut_sin[97]=32′b00000000000000001110110010000011;
lut_sin[98]=32′b00000000000000010011011110010011;
lut_sin[99]=32′b00000000000000001111000001010101;
lut_sin[100]=32′b00000000000000010100000001010011;
lut_sin[101]=32′b00000000000000001111001100011110;
lut_sin[102]=32′b00000000000000010100011010111001;
lut_sin[103]=32′b00000000000000001111010011111010;
lut_sin[104]=32′b00000000000000010100011010111001;
lut_sin[105]=32′b00000000000000001111010011111010;
lut_sin[106]=32′b00000000000000010101000001110100;
lut_sin[107]=32′b00000000000000001111011111001100;
lut_sin[108]=32′b00000000000000010101101110000001;
lut_sin[109]=32′b00000000000000001111101000111011;
lut_sin[110]=32′b00000000000000010101111111011011;
lut_sin[111]=32′b00000000000000001111101100010100;
lut_sin[112]=32′b00000000000000010101111111011011;
lut_sin[113]=32′b00000000000000001111101100010100;
lut_sin[114]=32′b00000000000000010110011100000110;
lut_sin[115]=32′b00000000000000001111110001111010;
lut_sin[116]=32′b00000000000000010110111110000100;
lut_sin[117]=32′b00000000000000001111110111010110;
lut_sin[118]=32′b00000000000000010111100011111101;
lut_sin[119]=32′b00000000000000001111111011000100;
lut_sin[120]=32′b00000000000000010111100011111101;
lut_sin[121]=32′b00000000000000001111111011000100;
lut_sin[122]=32′b00000000000000010111111101100100;
lut_sin[123]=32′b00000000000000001111111101100101;
lut_sin[124]=32′b00000000000000011000011111100010;
lut_sin[125]=32′b00000000000000001111111111111111;
lut_sin[126]=32′b00000000000000011001001000011111;
lut_sin[127]=32′b00000000000000001111111111111111;
//look-up table for cos
lut_cos[0]=32′b00000000000000000000000000000000;
lut_cos[1]=32′b00000000000000010000000000000000;
lut_cos[2]=32′b00000000000000000000100110111010;
lut_cos[3]=32′b00000000000000010000000000000000;
lut_cos[4]=32′b00000000000000000001001000111000;
lut_cos[5]=32′b00000000000000001111111101110001;
lut_cos[6]=32′b00000000000000000001100100100001;
lut_cos[7]=32′b00000000000000001111111011000100;
lut_cos[8]=32′b00000000000000000001100100100001;
lut_cos[9]=32′b00000000000000001111111011000100;
lut_cos[10]=32′b00000000000000000001110110111101;
lut_cos[11]=32′b00000000000000001111111001010000;
lut_cos[12]=32′b00000000000000000010011010111110;
lut_cos[13]=32′b00000000000000001111110101010100;
lut_cos[14]=32′b00000000000000000011001001000011;
lut_cos[15]=32′b00000000000000001111101100010100;
lut_cos[16]=32′b00000000000000000011001001000011;
lut_cos[17]=32′b00000000000000001111101100010100;
lut_cos[18]=32′b00000000000000000011100011101011;
lut_cos[19]=32′b00000000000000001111100111001000;
lut_cos[20]=32′b00000000000000000100000101101010;
lut_cos[21]=32′b00000000000000001111011111011111;
lut_cos[22]=32′b00000000000000000100101101100101;
lut_cos[23]=32′b00000000000000001111010011111010;
lut_cos[24]=32′b00000000000000000100101101100101;
lut_cos[25]=32′b00000000000000001111010011111010;
lut_cos[26]=32′b00000000000000000101010011011110;
lut_cos[27]=32′b00000000000000001111001000111010;
lut_cos[28]=32′b00000000000000000101110101011100;
lut_cos[29]=32′b00000000000000001110111101000001;
lut_cos[30]=32′b00000000000000000110010010000111;
lut_cos[31]=32′b00000000000000001110110010000011;
lut_cos[32]=32′b00000000000000000110010010000111;
lut_cos[33]=32′b00000000000000001110110010000011;
lut_cos[34]=32′b00000000000000000110100100100011;
lut_cos[35]=32′b00000000000000001110101010111111;
lut_cos[36]=32′b00000000000000000111001000100100;
lut_cos[37]=32′b00000000000000001110011100110011;
lut_cos[38]=32′b00000000000000000111110110101001;
lut_cos[39]=32′b00000000000000001110000111000101;
lut_cos[40]=32′b00000000000000000111110110101001;
lut_cos[41]=32′b00000000000000001110000111000101;
lut_cos[42]=32′b00000000000000001000010000010000;
lut_cos[43]=32′b00000000000000001101111011000001;
lut_cos[44]=32′b00000000000000001000110010001110;
lut_cos[45]=32′b00000000000000001101101010001011;
lut_cos[46]=32′b00000000000000001001011011001011;
lut_cos[47]=32′b00000000000000001101010011011011;
lut_cos[48]=32′b00000000000000001001011011001011;
lut_cos[49]=32′b00000000000000001101010011011011;
lut_cos[50]=32′b00000000000000001010000001000100;
lut_cos[51]=32′b00000000000000001100111110011000;
lut_cos[52]=32′b00000000000000001010100011000010;
lut_cos[53]=32′b00000000000000001100101001110000;
lut_cos[54]=32′b00000000000000001010111111101101;
lut_cos[55]=32′b00000000000000001100010111100100;
lut_cos[56]=32′b00000000000000001010111111101101;
lut_cos[57]=32′b00000000000000001100010111100100;
lut_cos[58]=32′b00000000000000001011100100100101;
lut_cos[59]=32′b00000000000000001100000000001011;
lut_cos[60]=32′b00000000000000001100000110100011;
lut_cos[61]=32′b00000000000000001011101001000100;
lut_cos[62]=32′b00000000000000001100100100001111;
lut_cos[63]=32′b00000000000000001011010100000100;
lut_cos[64]=32′b00000000000000001100100100001111;
lut_cos[65]=32′b00000000000000001011010100000100;
lut_cos[66]=32′b00000000000000001100111101110110;
lut_cos[67]=32′b00000000000000001011000001111110;
lut_cos[68]=32′b00000000000000001101011111110100;
lut_cos[69]=32′b00000000000000001010101001010001;
lut_cos[70]=32′b00000000000000001110001000110001;
lut_cos[71]=32′b00000000000000001010001001100111;
lut_cos[72]=32′b00000000000000001110001000110001;
lut_cos[73]=32′b00000000000000001010001001100111;
lut_cos[74]=32′b00000000000000001110101100100111;
lut_cos[75]=32′b00000000000000001001101101111010;
lut_cos[76]=32′b00000000000000001111001110100101;
lut_cos[77]=32′b00000000000000001001010010011100;
lut_cos[78]=32′b00000000000000001111101101010011;
lut_cos[79]=32′b00000000000000001000111000111001;
lut_cos[80]=32′b00000000000000001111101101010011;
lut_cos[81]=32′b00000000000000001000111000111001;
lut_cos[82]=32′b00000000000000010000010010001011;
lut_cos[83]=32′b00000000000000001000011010010000;
lut_cos[84]=32′b00000000000000010000110100001001;
lut_cos[85]=32′b00000000000000000111111100111001;
lut_cos[86]=32′b00000000000000010001010001110101;
lut_cos[87]=32′b00000000000000000111100010101101;
lut_cos[88]=32′b00000000000000010001010001110101;
lut_cos[89]=32′b00000000000000000111100010101101;
lut_cos[90]=32′b00000000000000010001111001110001;
lut_cos[91]=32′b00000000000000000110111111011111;
lut_cos[92]=32′b00000000000000010010011100110001;
lut_cos[93]=32′b00000000000000000110011111100001;
lut_cos[94]=32′b00000000000000010010110110010111;
lut_cos[95]=32′b00000000000000000110000111110111;
lut_cos[96]=32′b00000000000000010010110110010111;
lut_cos[97]=32′b00000000000000000110000111110111;
lut_cos[98]=32′b00000000000000010011010100000100;
lut_cos[99]=32′b00000000000000000101101100011011;
lut_cos[100]=32′b00000000000000010011110101000000;
lut_cos[101]=32′b00000000000000000101001101100000;
lut_cos[102]=32′b00000000000000010100011010111001;
lut_cos[103]=32′b00000000000000000100101001010000;
lut_cos[104]=32′b00000000000000010100011010111001;
lut_cos[105]=32′b00000000000000000100101001010000;
lut_cos[106]=32′b00000000000000010100111000100110;
lut_cos[107]=32′b00000000000000000100001100110101;
lut_cos[108]=32′b00000000000000010101011001100010;
lut_cos[109]=32′b00000000000000000011101100111011;
lut_cos[110]=32′b00000000000000010101111111011011;
lut_cos[111]=32′b00000000000000000011000111110001;
lut_cos[112]=32′b00000000000000010101111111011011;
lut_cos[113]=32′b00000000000000000011000111110001;
lut_cos[114]=32′b00000000000000010110100011010001;
lut_cos[115]=32′b00000000000000000010100100100111;
lut_cos[116]=32′b00000000000000010110111111000110;
lut_cos[117]=32′b00000000000000000010001001000011;
lut_cos[118]=32′b00000000000000010111100011111101;
lut_cos[119]=32′b00000000000000000001100100010111;
lut_cos[120]=32′b00000000000000010111100011111101;
lut_cos[121]=32′b00000000000000000001100100010111;
lut_cos[122]=32′b00000000000000011000000000101000;
lut_cos[123]=32′b00000000000000000001000111110101;
lut_cos[124]=32′b00000000000000011000100100101001;
lut_cos[125]=32′b00000000000000000000100011110101;
lut_cos[126]=32′b00000000000000011001001000011111;
lut_cos[127]=32′b00000000000000000000000000000000;
//look-up table for tan
lut_tan[0]=32′b00000000000000000000000000000000;
lut_tan[1]=32′b00000000000000000000000000000000;
lut_tan[2]=32′b00000000000000000000100010110100;
lut_tan[3]=32′b00000000000000000000100010110100;
lut_tan[4]=32′b00000000000000000001000011110000;
lut_tan[5]=32′b00000000000000000001000011110001;
lut_tan[6]=32′b00000000000000000001100100100001;
lut_tan[7]=32′b00000000000000000001100100110110;
lut_tan[8]=32′b00000000000000000001100100100001;
lut_tan[9]=32′b00000000000000000001100100110110;
lut_tan[10]=32′b00000000000000000010001000010111;
lut_tan[11]=32′b00000000000000000010001001000010;
lut_tan[12]=32′b00000000000000000010101001010100;
lut_tan[13]=32′b00000000000000000010101010101011;
lut_tan[14]=32′b00000000000000000011001001000011;
lut_tan[15]=32′b00000000000000000011001011101011;
lut_tan[16]=32′b00000000000000000011001001000011;
lut_tan[17]=32′b00000000000000000011001011101011;
lut_tan[18]=32′b00000000000000000011101000110011;
lut_tan[19]=32′b00000000000000000011101100101011;
lut_tan[20]=32′b00000000000000000100001010110001;
lut_tan[21]=32′b00000000000000000100010000100110;
lut_tan[22]=32′b00000000000000000100101101100101;
lut_tan[23]=32′b00000000000000000100110110101000;
lut_tan[24]=32′b00000000000000000100101101100101;
lut_tan[25]=32′b00000000000000000100110110101000;
lut_tan[26]=32′b00000000000000000101001101010101;
lut_tan[27]=32′b00000000000000000101011001010010;
lut_tan[28]=32′b00000000000000000101101111010011;
lut_tan[29]=32′b00000000000000000101111111010111;
lut_tan[30]=32′b00000000000000000110010010000111;
lut_tan[31]=32′b00000000000000000110101000001001;
lut_tan[32]=32′b00000000000000000110010010000111;
lut_tan[33]=32′b00000000000000000110101000001001;
lut_tan[34]=32′b00000000000000000110111110001001;
lut_tan[35]=32′b00000000000000000111011011101111;
lut_tan[36]=32′b00000000000000000111100000001000;
lut_tan[37]=32′b00000000000000001000000110011000;
lut_tan[38]=32′b00000000000000000111110110101001;
lut_tan[39]=32′b00000000000000001000100011010101;
lut_tan[40]=32′b00000000000000000111110110101001;
lut_tan[41]=32′b00000000000000001000100011010101;
lut_tan[42]=32′b00000000000000001000010110011001;
lut_tan[43]=32′b00000000000000001001001100001001;
lut_tan[44]=32′b00000000000000001000111000010111;
lut_tan[45]=32′b00000000000000001001111001110110;
lut_tan[46]=32′b00000000000000001001011011001011;
lut_tan[47]=32′b00000000000000001010101100001101;
lut_tan[48]=32′b00000000000000001001011011001011;
lut_tan[49]=32′b00000000000000001010101100001101;
lut_tan[50]=32′b00000000000000001001110110110101;
lut_tan[51]=32′b00000000000000001011010100001101;
lut_tan[52]=32′b00000000000000001010011001110101;
lut_tan[53]=32′b00000000000000001100001000111110;
lut_tan[54]=32′b00000000000000001010111111101101;
lut_tan[55]=32′b00000000000000001101001000011000;
lut_tan[56]=32′b00000000000000001010111111101101;
lut_tan[57]=32′b00000000000000001101001000011000;
lut_tan[58]=32′b00000000000000001011011111011101;
lut_tan[59]=32′b00000000000000001101111101011111;
lut_tan[60]=32′b00000000000000001100000001011011;
lut_tan[61]=32′b00000000000000001110111010010111;
lut_tan[62]=32′b00000000000000001100100100001111;
lut_tan[63]=32′b00000000000000001111111111111111;
lut_tan[64]=32′b00000000000000001100100100001111;
1ut_tan[65]=32′b00000000000000001111111111111111;
lut_tan[66]=32′b00000000000000001100111111111001;
lut_tan[67]=32′b00000000000000010000110111010010;
lut_tan[68]=32′b00000000000000001101100010111001;
lut_tan[69]=32′b00000000000000010010000001100110;
lut_tan[70]=32′b00000000000000001110001000110001;
lut_tan[71]=32′b00000000000000010011011111101111;
lut_tan[72]=32′b00000000000000001110001000110001;
lut_tan[73]=32′b00000000000000010011011111101111;
lut_tan[74]=32′b00000000000000001110101001100010;
lut_tan[75]=32′b00000000000000010100110001001010;
lut_tan[76]=32′b00000000000000001111001011100001;
lut_tan[77]=32′b00000000000000010110001111000010;
lut_tan[78]=32′b00000000000000001111101101010011;
lut_tan[79]=32′b00000000000000010111111100100001;
lut_tan[80]=32′b00000000000000001111101101010011;
lut_tan[81]=32′b00000000000000010111111100100001;
lut_tan[82]=32′b00000000000000010000001111000110;
lut_tan[83]=32′b00000000000000011001101010000000;
lut_tan[84]=32′b00000000000000010000110001000100;
lut_tan[85]=32′b00000000000000011011101000010011;
lut_tan[86]=32′b00000000000000010001010001110101;
lut_tan[87]=32′b00000000000000011101111011110001;
lut_tan[88]=32′b00000000000000010001010001110101;
lut_tan[89]=32′b00000000000000011101111011110001;
lut_tan[90]=32′b00000000000000010001111001110001;
lut_tan[91]=32′b00000000000000100000101111011111;
lut_tan[92]=32′b00000000000000010010011010101110;
lut_tan[93]=32′b00000000000000100011101011010111;
lut_tan[94]=32′b00000000000000010010110110010111;
lut_tan[95]=32′b00000000000000100110101000001001;
lut_tan[96]=32′b00000000000000010010110110010111;
lut_tan[97]=32′b00000000000000100110101000001001;
lut_tan[98]=32′b00000000000000010011011110010011;
lut_tan[99]=32′b00000000000000101010111000110110;
lut_tan[100]=32′b00000000000000010011111111010000;
lut_tan[101]=32′b00000000000000101111100111100100;
lut_tan[102]=32′b00000000000000010100011010111001;
lut_tan[103]=32′b00000000000000110100101111101011;
lut_tan[104]=32′b00000000000000010100011010111001;
lut_tan[105]=32′b00000000000000110100101111101011;
lut_tan[106]=32′b00000000000000010101000010110101;
lut_tan[107]=32′b00000000000000111100001001100110;
lut_tan[108]=32′b00000000000000010101100011110010;
lut_tan[109]=32′b00000000000001000101000101100100;
lut_tan[110]=32′b00000000000000010101111111011011;
lut_tan[111]=32′b00000000000001010000011011111111;
lut_tan[112]=32′b00000000000000010101111111011011;
lut_tan[113]=32′b00000000000001010000011011111111;
lut_tan[114]=32′b00000000000000010110101100011111;
lut_tan[115]=32′b00000000000001100010111011110011;
lut_tan[116]=32′b00000000000000010111001100011010;
lut_tan[117]=32′b00000000000001111100001001011001;
lut_tan[118]=32′b00000000000000010111100011111101;
lut_tan[119]=32′b00000000000010100010011100110110;
lut_tan[120]=32′b00000000000000010111100011111101;
lut_tan[121]=32′b00000000000010100010011100110110;
lut_tan[122]=32′b00000000000000010110101100011111;
lut_tan[123]=32′b00000000000001100010111011110011;
lut_tan[124]=32′b00000000000000010111001100011010;
lut_tan[125]=32′b00000000000001111100001001011001;
lut_tan[126]=32′b00000000000000011001001000011111;
lut_tan[127]=32′b01110111010110111010001001100101;
U1根据三角函数的类型和已计算得出的查找表地址确定控制点的x、y坐标并分别送给U2和U3,具体计算过程为:
假定三角函数类型为sin,计算得出的查找表地址为addr,则4个控制点V0、V1、V2、V3的x、y坐标分别为lut_sin[addr]、lut_sin[addr+1]、lut_sin[addr+2]、lut_sin[addr+3]、lut_sin[addr+4]、lut_sin[addr+5]、lut_sin[addr+6]、lut_sin[addr+7]。
Bernstein基函数产生与坐标逼近电路U2根据控制点x坐标计算Bernstein基函数并进而确定与输入自变量值逼近达到精度要求的基函数b03、b13、b23、b33,四个基函数被送到求值器U3;
基本三角函数求值器U3根据Bernstein基函数和4个控制点的y坐标计算出最终的三角函数值。
这样就完成了基本三角函数的求值工作,该电路在完成函数求值过程中,数据精度可以达到0.01%,满足图形处理器中函数求值的精度要求。该求值器算法简洁,电路结构清晰,运算速度快,精度符合要求,工作可靠。