搜索
bottom↓
回复: 25

查表用c怎么写,求帮忙,要速度快。占用资源少。

[复制链接]

出0入0汤圆

发表于 2015-11-9 20:46:59 | 显示全部楼层 |阅读模式
1,775,
2,765,
3,755,
4,745,
5,734,
6,724,
7,713,
8,702,
9,691,
10,680,
11,669,
12,658,
13,646,
14,635,
15,624,
16,612,
17,601,
18,590,
19,578,
20,567,
21,556,
22,545,
23,534,
24,523,
25,512,
26,499,
27,487,
28,475,
29,463,
30,452,
31,441,
32,431,
33,420,
34,410,
35,400,
36,391,
37,381,
38,372,
39,363,
40,354,
41,345,
42,336,
43,328,
44,319,
45,311,
46,303,
47,295,
48,287,
49,279,
50,272,
51,264,
52,257,
53,249,
54,242,
55,235,
56,229,
57,222,
58,216,
59,209,
60,203,
61,197,
62,192,
63,186,
64,181,
65,176,
66,171,
67,166,
68,161,
69,157,
70,152,
71,148,
72,144,
73,140,
74,136,
75,132,
76,129,
77,125,
78,121,
79,118,
80,114,
81,111,
82,108,
83,104,
84,101,
85,97,
86,95,
87,92,
88,89,
89,87,
90,84,
91,82,
92,80,
93,78,
94,76,
95,73,
96,72,
97,70,
98,68,
99,66,
100,64
如上面这样的,温度对应的AD值,查表怎么写

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2015-11-9 20:50:19 | 显示全部楼层
就只能死查或者二分法吗

出0入0汤圆

发表于 2015-11-9 20:53:04 | 显示全部楼层
本帖最后由 babysnail 于 2015-11-9 20:56 编辑

一维数据啊,大家都在退步。
uint fun(uchar temp)
{
const uint dat[100]={0,。。。。。。};
return dat[temp];
}

出0入0汤圆

发表于 2015-11-9 20:54:52 | 显示全部楼层
laka9958 发表于 2015-11-9 20:50
就只能死查或者二分法吗

什么二分法啊。又不是查找。

出0入0汤圆

 楼主| 发表于 2015-11-9 21:05:13 | 显示全部楼层
babysnail 发表于 2015-11-9 20:53
一维数据啊,大家都在退步。
uint fun(uchar temp)
{

11,669,
12,658,
670怎么查  

出0入0汤圆

发表于 2015-11-9 21:11:23 | 显示全部楼层
laka9958 发表于 2015-11-9 21:05
11,669,
12,658,
670怎么查

原来是这样。 那叫拟合。  

出0入0汤圆

发表于 2015-11-9 21:24:03 | 显示全部楼层
如果是顺序排列,可以用二分法。
不过我感觉你是要数据拟合,这样可以求出任意点的数值。

出0入0汤圆

发表于 2015-11-9 21:27:16 | 显示全部楼层
二分法啊,这么点儿数据二分法也用不了几个循环

出0入0汤圆

发表于 2015-11-9 23:17:03 | 显示全部楼层
你这个表示线性的,所以二分比较合适

出0入0汤圆

发表于 2015-11-10 00:57:32 | 显示全部楼层
整个的取值范围也就700多,
倒过来重新写一个查找表就好了。
省下来的代码空间估计和表差不多大。

出330入0汤圆

发表于 2015-11-10 08:18:00 | 显示全部楼层
看这个数组,温度越高,AD采回来的值越低,说明是负温度系数(NTC)的热电偶。如果不想查表,就用公式算。查表的话,要么插补要么拟合。

出0入0汤圆

发表于 2015-11-10 08:34:04 | 显示全部楼层
表示坐等好方法,之前做过是拟合每个数值然后查表的方法

出0入0汤圆

发表于 2015-11-10 08:41:34 | 显示全部楼层
二分妥妥的。

出870入263汤圆

发表于 2015-11-10 08:46:25 | 显示全部楼层
难道你不知道二分法查找算法有一个特性很牛逼吗(可能很多人真的不知道):如果你所查的数据(假设为a)不在排序数组(假设为data[])里,那么二分法最后得到的是比给定a偏小的值所在的索引(假设为i)!
利用这个特性,你就能得出a在data[i]和data[i+1]之间。然后就可以用线性方法计算出a的拟合值了!

出0入0汤圆

发表于 2015-11-10 21:38:28 来自手机 | 显示全部楼层
armstrong 发表于 2015-11-10 08:46
难道你不知道二分法查找算法有一个特性很牛逼吗(可能很多人真的不知道):如果你所查的数据(假设为a)不 ...

没看懂,具体方法?

出0入0汤圆

 楼主| 发表于 2015-11-12 18:50:48 | 显示全部楼层
usm4glx 发表于 2015-11-9 23:17
你这个表示线性的,所以二分比较合适

不是线性的  表不大   直接用while查了   

出0入0汤圆

发表于 2015-11-12 20:10:34 | 显示全部楼层
wxtypeng 发表于 2015-11-10 21:38
没看懂,具体方法?

就说楼主给出的例子吧,
已知:
10,680,
11,669,
12,658,
求670是多少
计算方法:
先用二分法找出670的左右值为680和669,
然后 11 - (670-669)/(680-669)  = 10.91
670就是10.91

出0入0汤圆

发表于 2015-11-12 20:18:00 来自手机 | 显示全部楼层
楼上正解,二分查表加线性拟合就搞定,楼主要精度高就用公式算吧!

出0入0汤圆

发表于 2015-11-12 22:32:20 来自手机 | 显示全部楼层
二叉树                        

出0入76汤圆

发表于 2015-11-12 22:57:09 | 显示全部楼层
lingdianhao 发表于 2015-11-12 20:18
楼上正解,二分查表加线性拟合就搞定,楼主要精度高就用公式算吧!

赞同, +1024

出0入0汤圆

发表于 2015-11-13 12:04:22 | 显示全部楼层
MARK一下,学习了

出0入0汤圆

发表于 2015-11-13 12:32:59 来自手机 | 显示全部楼层
lingdianhao 发表于 2015-11-12 20:18
楼上正解,二分查表加线性拟合就搞定,楼主要精度高就用公式算吧!

表取整,ad先取整后在表中直接取出值,然后拟合就行了

出0入0汤圆

发表于 2016-1-19 08:41:48 | 显示全部楼层
e1ki0lp 发表于 2015-11-12 20:10
就说楼主给出的例子吧,
已知:
10,680,

原来这样拟合

出0入0汤圆

发表于 2016-3-1 17:14:22 | 显示全部楼层
二叉树,这个号

出0入0汤圆

发表于 2016-3-2 01:02:36 来自手机 | 显示全部楼层
二分查找后,再用插值法求出实际值在表中的大概位置。楼上很多人所谓的拟合就是插值算法。

出0入0汤圆

发表于 2016-3-2 02:09:54 | 显示全部楼层
嗯。MARLIN里就是这样的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 22:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表