请教一个算法处理方式

2020-01-20 19:13发布

程序中需要求一个商(Z)的结果,这个商(Z)的结果最大不大于65535(10进制),其中有一个定值Y=10000000000(10进制),然后去读一个20位的ADC的数据变量X,这个X的最大结果不大于160000,最小不小于152600,(10进制,因此时读的结果并不是满幅值),然后用Y去除以读到的结果X,最后得到商Z,请问如何处理?
直接用Z=10000000000/X;试过,不行,算出的结果不准确,除法没有乘法准确。请问有什么好的办法去处理?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
brahen
1楼-- · 2020-01-21 10:39
NJ8888 发表于 2015-1-22 21:49
没看懂,路过

同没看懂。



xuhai777
2楼-- · 2020-01-21 11:48
这相当于做数值转换 160000 => 65535,也就是 160000*A/B=65535,A/B=0.40959375
为了除法计算快,采用移位方式,则B取2的N次方,N越大,精度越高,如B取2^16=65536,A取26843
xuhai777
3楼-- · 2020-01-21 15:16
如果同时要求 152600 => 0,也就是 (X-152600)*A/B=65535,B取65536,A取580392
wxdn
4楼-- · 2020-01-21 20:14
这个程序原本是一个测量电压的程序,将输入电压(0-60V)通过分压电阻分压后给ADC进行采样,由于分压电阻肯定会存在一定的误差,所以程序里就做了一个校正的程序,就是校正10V,校正的时候,输入一个标准的10V电压,然后读ADC的数据,再用10V去除以读到的ADC数据,得到一个倍数,这个倍数就将它存在EEPROM里,然后每次将读到的ADC数据乘以这个倍数就是实际的电压值了。看了5楼的程序,好像行不通。
wxdn
5楼-- · 2020-01-22 00:06
 精彩回答 2  元偷偷看……
steaven2000
6楼-- · 2020-01-22 05:14
wxdn 发表于 2015-1-24 04:20
终于搞定了,用了最笨的办法实现的,设采集到的ADC数据为DAT,将校准电压10V分解成10*1000000000,然后用10 ...

先解释下为什么不准确?

一周热门 更多>