找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3060|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)計(jì)算數(shù)值過(guò)大,keil仿真精確度到不到小數(shù)點(diǎn)后兩位或三位。該怎么做?急求

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:433410 發(fā)表于 2018-11-26 14:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
返回值指針是double類型的數(shù)組也不能接受,后來(lái)改成long類型。數(shù)值都對(duì)了,但是精度達(dá)不到小數(shù)點(diǎn)后兩位或三位。
求大神將我怎么去掉高位數(shù)值,我需要小數(shù)點(diǎn)前4到5位,小數(shù)點(diǎn)后2到3位。拜托了。

單片機(jī)源碼:
  1. void process(double a,double b,double z,double *back_sp)
  2. {
  3.   double xdata a,b,c;
  4.   double xdata N1,M1,J1,G1,H1;
  5.   J1=B1-zwx_d;
  6.   J1*=0.0174532925199;
  7.   G1=J1*J1;

  8.   M1=A1*0.0174532925199;
  9.   H1=sin(M1);
  10.   M1=cos(M1);
  11.   N1=M1*M1;

  12.   a=(32144.5189-(135.3646-(0.7034-0.0041*N1)*N1)*N1);
  13.   b=(0.25+0.00253*N1)*N1;
  14.   b=b-0.04167;
  15.   c=0.167*N1-0.083;
  16.   c=c*N1;
  17.   c=c*G1;
  18.   c+=b;
  19.   c*=G1;
  20.   c+=0.5;
  21.   c*=G1;
  22.   b=108.996-0.603*N1;
  23.   b=b*N1;
  24.   b=21565.045-b;
  25.   b*=N1;
  26.   b=6399596.652-b;
  27.   b=b*c;
  28.   a=a-b;
  29.   back_sp[0]=111133.00468*A1-a*M1*H1;


  30.   a=0.001123*N1;
  31.   a+=0.3333333;
  32.   a*=N1;
  33.   a-=0.1666667;
  34.   b=0.1702-0.20382*N1;
  35.   b*=N1;
  36.   b=0.00878-b;
  37.   b*=G1;
  38.   a+=b;
  39.   a=a*G1;
  40.   a+=1;
  41.   a*=J1;
  42.   b=108.996-0.603*N1;
  43.   b*=M1;
  44.   b=21565.045-b;
  45.   b*=N1;
  46.   b=6399596.652-b;

  47.   back_sp[1]=500000+a*b*M1;
  48. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:401564 發(fā)表于 2018-11-26 19:31 | 只看該作者
我不會(huì)C,但我知道單片機(jī)原理。
你這個(gè)數(shù)據(jù)太大了,而且還是浮點(diǎn)型的,但不管多少位的單片機(jī),都沒(méi)有浮點(diǎn)型這個(gè)數(shù),本質(zhì)上都是整形的二進(jìn)制數(shù),如果單片機(jī)本身沒(méi)有乘法器的話,只要是超過(guò)單片機(jī)本身的位數(shù)的,除法全部用減法來(lái)進(jìn)行,乘法全部用加法來(lái)進(jìn)行
M1=A1*0.0174532925199,這個(gè)運(yùn)算是這樣進(jìn)行的:先是用加法進(jìn)行A1*174532925199,然后再去除以剛才去掉小數(shù)點(diǎn)用的倍數(shù):1000000000000,對(duì)于溢出了long類型長(zhǎng)度的,全部去掉,誤差就產(chǎn)生在這了
你要是問(wèn)我怎么解決,不好意思,不知道,我只會(huì)匯編,256以內(nèi)的運(yùn)算還行,超過(guò)了。。。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:434015 發(fā)表于 2018-11-27 10:51 | 只看該作者
你這個(gè)是什么板子執(zhí)行運(yùn)算呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表