久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 51單片機可否實現上下五千年農歷計算(非查表法) [打印本頁]

作者: exv    時間: 2014-12-6 11:39
標題: 51單片機可否實現上下五千年農歷計算(非查表法)
本帖最后由 exv 于 2014-12-6 12:58 編輯

看了論壇中幾個有農歷的時鐘程序,無一例外使用查表法實現的,且只能查上下100年(因為DS1302只有上下一百年)。

看過莆田第十中學許劍偉老師的農歷算法,可實現上下五千年農歷的計算(含節氣),
與主函數直接相關的C代碼就有6000余行;
關于日月星辰軌道計算的代碼有數十組,
每一組換算往往涉及幾十個64位double。

不知道51單片機在 合理 配置的情況下,能否實現這樣的計算?

如果不行,實現這一功能的最低配置是?

許劍偉老師的代碼這兒就不貼了(估計也貼不下),百度下 莆田第十中學許劍偉老師 即可。

51hei人才濟濟,下面這段計算圓周率的代碼大家應該非常熟悉,古人幾十本書還沒說清的一兩行就搞定了:
  1. long a=10000,b,c=2800,d,e,f[2801],g;
  2. void main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,cout<<e+d/a,e=d%a)for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
復制代碼


古人制農歷最多也就是算盤,難道 51單片機 真敵不過古人算盤?

另外,許老師的日歷程序除了可定農歷日期/節氣,還可依此結合設定的經緯度換算出每天的日落日出,非常實用。


作者: dgahz    時間: 2014-12-6 12:25
不會,太高深了。算盤結果可暫記紙上,記多少都可以,容量無限大,今天記不完明天接著記,速度可以無限慢。如果比這些,51單片機還真拍馬莫及。
作者: exv    時間: 2014-12-6 12:45
dgahz 發表于 2014-12-6 12:25
不會,太高深了。算盤結果可暫記紙上,記多少都可以,容量無限大,今天記不完明天接著記,速度可以無限慢。 ...

程序本身并不高深,有高中水平即能看懂(不然 莆田第十中學的學生們可就悲催了),也就是些牛頓方程什么的。

只是這么大的計算量,放在RAM有限的51單片機確實是一個麻煩,也難怪目前能見到的都是查表法實現的。

不知如果借助一個2M的EEPROM能否解決這個問題?
作者: dgahz    時間: 2014-12-6 13:40
農歷是怎么算出來的我真搞不懂,和牛頓有關?印象中牛頓是力學噸
作者: dgahz    時間: 2014-12-6 13:41
出社會太久,知識都丟了。
作者: 風緣    時間: 2014-12-6 16:31
應該是不管用吧
作者: exv    時間: 2014-12-6 16:40
本帖最后由 exv 于 2014-12-6 16:46 編輯

還是貼一些莆田十中許老師的代碼給大家溫習下相關知識:

1.算出太陽/月亮/地球的位置(牛頓力學)
2.反算太陽月亮視黃經,相等時刻定月初一
3.根據各個月初一導出整個農歷,節氣可從太陽黃經直接導出。

許老師的代碼雖然多,有相當部分是固定不變的天文/地理參數,包括一大堆校正因子集,故而前面的帖子提出使用EEPROM作存儲輔助。

既然圓周率求算都能從幾十本書變為兩行代碼,農歷又是極為常用的東西,必定有非常多人去研究,一個簡潔高效能在單片機上運行的代碼應該是已經有人寫出過的。

下面代碼是通過地球軌道方程反算太陽黃經,從而計算出各個節氣。
(51hei只見到一個歷法程序有節氣,只是人家沒給代碼,不知道是不是用下面方法算出的)


  1. double qi_low(double W)
  2. {
  3.         //最大誤差小于30分鐘,平均5分
  4.         double t,L,v= 628.3319653318;
  5.         t =  ( W - 4.895062166 )/v; //第一次估算,誤差2天以內
  6.         t -= ( 53*t*t + 334116*cos( 4.67+628.307585*t) + 2061*cos( 2.678+628.3076*t)*t )/v/10000000; //第二次估算,誤差2小時以內
  7.         
  8.         L = 48950621.66 + 6283319653.318*t + 53*t*t //平黃經
  9.                 +334166 * cos( 4.669257+  628.307585*t) //地球橢圓軌道級數展開
  10.                 +3489 * cos( 4.6261  + 1256.61517*t ) //地球橢圓軌道級數展開
  11.                 +2060.6 * cos( 2.67823 +  628.307585*t ) * t  //一次泊松項
  12.                 - 994 - 834*sin(2.1824-33.75705*t); //光行差與章動修正
  13.         
  14.         t -= (L/10000000 -W )/628.332 + (32*(t+1.8)*(t+1.8)-20)/86400/36525;
  15.         return t*36525 + (double)8/24;
  16. }
復制代碼



作者: a719563181    時間: 2015-3-20 11:26
好高深的有沒有?反正我是看迷糊了
作者: exv    時間: 2015-3-20 17:48
a719563181 發表于 2015-3-20 11:26
好高深的有沒有?反正我是看迷糊了

其實,是有的問題被復雜化了。

農歷本來是用來指導一年的農時,大多數時候也不需要精確到分秒。
如同買鞋子的時候最多用皮尺之類的工具量量尺寸,沒人會去用游標卡尺。

這一步
1.算出太陽/月亮/地球的位置(牛頓力學)

為了得到精確的值,使用近代天文學算法(多體),耗費了大量計算資源。
現代算法是從《史記歷書》演化而來,只是司馬遷直接把太陽月亮假設為勻速圓周運動,通過這樣一個近似,計算量極大減小,所得的歷法也滿足指導農時之用。

當然,現代算法也是一種學問上的嚴謹。日月食的時間能精確到秒(參看許老師代碼)。
作者: zw_mcu    時間: 2017-5-11 11:01
很好的資料




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91视频正在播放 | 久草色视频 | 天天干视频 | 一区二区三区成人 | 欧美亚洲国产日韩 | 亚洲精品久久久 | 欧美日韩视频在线 | 日韩h | 99在线国产 | m豆传媒在线链接观看 | 日韩欧美国产精品一区二区 | 亚洲精品乱码久久久久久久久久 | 精品美女在线观看 | 91影院 | 麻豆精品久久久 | 国产精品久久久久久久久免费丝袜 | 成人在线a | 亚洲电影专区 | 成人精品福利 | 色婷婷久久 | 91精品国产91久久久久久最新 | 久草精品在线 | 韩日av片 | 超碰免费在| 国产精品精品久久久 | 亚州毛片 | 玖操| 亚洲福利在线观看 | 成人日韩av| 成人影音| 中文字幕精品一区二区三区精品 | 在线观看h视频 | 国产91黄色 | 中文在线www | 一区二区成人在线 | 色视频在线观看 | 日韩影音| 自拍第1页 | 国产在线视频一区二区董小宛性色 | 亚洲美女一区 | 不卡一区|