程序中需要求一个商(Z)的结果,这个商(Z)的结果最大不大于65535(10进制),其中有一个定值Y=10000000000(10进制),然后去读一个20位的ADC的数据变量X,这个X的最大结果不大于160000,最小不小于152600,(10进制,因此时读的结果并不是满幅值),然后用Y去除以读到的结果X,最后得到商Z,请问如何处理?
直接用Z=10000000000/X;试过,不行,算出的结果不准确,除法没有乘法准确。请问有什么好的办法去处理?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
153333 - 152600 = 733
733 = 2*256 + 221
area[2]=65312, step[2]=109
65312 - (221*109+128)>>8 = 65312 - 94 = 65218
10000000000/153333 = 65217.533 ≈ 65218
158888 - 152600 = 6288
6288 = 24*256 + 144
area[24]=62995, step[24]=102
62995 - (144*102+128)>>8 = 62995 - 57 = 62938
10000000000/158888 = 62937.415 ≈ 62937
“看了5楼的程序,好像行不通。”
随便取了153333和158888来验证我在5楼提出的算法,不知道到底是哪里行不通?
编辑原因:给字加了颜 {MOD}。
一周热门 更多>