问答题
试将正弦函数表编入半导体存储器中(ROM、RAM均可)。若要将正弦、余弦、正切、余切函数表编入同一片半导体存储器中应采用什么方法?(设角度最小单位为1°,且为0~90°)
【正确答案】因为半导体存储器编制电子表格时,只有两个要素:一是地址;二是地址所对应的存储单元应存放的内容。显然,编制正弦函数的电子表格时,由于正弦函数表本身也有两个要素,一是角度,二是角度所对应的正弦函数值,这样就可以把角度作为“地址”(或称将“角度”映射到“地址”),而把角度对应的正弦函数值由十进制数变换成二进制数后存放到由对应的角度所映射的地址存储单元中即可。
因为角度为0~90°,最小单位为1°,这样地址共91个,又因为26<90<27,所以地址码应选7位。若正弦函数值精确到小数点后第4位,则二进制小数应取16位,因此该存储器的容量为91×16(位)。事实上是没有这种规格的现成的存储器的,为此可选存储容量大些的,如SRAM6116(2K×8位),用2片扩展成16位,然后从其地址空间划出91个地址来存放正弦函数的二进制小数的值。
由于6116共有11位地址,即2048个字,那么第1个字的地址就是00000000000。显然这样表示地址不方便,为此用十六进制数来表示,可以简便些,例如第91个字的地址是00001011010用十六进制数表示为05AH(即十进制数的90),所以存放正弦函数的地址空间是从000H~05AH共91个地址。
由于6116×2的地址空间还很富余,故还可以将余弦、正切、余切函数的函数表放进去。但是新的问题出现了,一是地址如何生成;二是正切和余切的函数值会大于1,用一个字表示1个角度的函数值无法表示,因为整数和小数混合一起存放在16位之中无法区分开。
首先考虑余弦函数表的地址生成,可以作个约定(实际上可由硬件或软件来具体实现),凡是遇到余弦函数的查表,首先将其角度固定加91,然后变成地址,即余弦函数表放在正弦函数表后面,从91到181,即地址空间是从05BH到085H共91个地址。
由于正切、余切函数值会大于1,采取每一度的函数值用2个字来表示。第1个字共16位,称高字节,用来表示函数值的整数部分;第2个字共16位,称低字节,用来表示函数的小数部分。这样,每一度角度的正切(或余切)函数值实际占用两个地址。若将正切函数表放在余弦函数表之后,则其地址的生成方法是,先将正切函数的角度乘以2之后再加上182,然后再形成地址。例如tanlo的地址为1×2+182=184,这样tan0°就占有182,183两个地址编号,而tan2°的地址为2×2+182=186,这样tan1°就占有184,185地址编号。tan89°的地址为89×2+182=360,它占有360、361两个地址编号。这样正切函数表的地址编号是从182开始到361为止,其地址空间为:0B6H~169H。余切函数表地址生成方法同正切,不再赘述。
最后要说明一点,sin90°=1,在这里的电子表格的存储单元中存放的不是1,而是0.9999的二进制小数,余弦cos0°=1,也是存放0.9999的二进制小数。而正切的角度范围是0~89°,余切的角度范围是1~90°。
【答案解析】