• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#8
資深會員
資深會員


查看用戶資訊
Eigen 大大好聰明哦,羨慕羨慕......

請問一下,我用計算機按 tan(90度) 為何會出現 Error,但 89 度卻有數值,超過 90 度後卻變成負數,為什麼會這樣子?

還有一個問題,就是 C 語言內建的函數數庫是不是因為要能夠計算到 360 度的全域範圍,而且有負號的情況,所以才需要複雜的浮點數運算,謝謝。

發表於: 2008/6/27 13:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#7
資深會員
資深會員


查看用戶資訊
那是查表的的第幾個




這是用 excel 建的table

先在 A 欄 建立 1~255
b 欄 =a1/256*pi()
c 欄 =tan(b1)
d 欄 =c1*256
e 欄 =dec2hex(d1,4)

這樣我們就將 -127/128π ~ 127/128π 的 tan 值建立出來

之後只要反過來找就可以了

將你的數值*256 後,和 e 欄找出最接近的值,然後對應到 a 就是 arctan了




我剛剛又想到可以查得更精準
0~1/2π 的值和 0~-1/2π 的值事實上是一樣的,只是差個正負號罷了

所以我只要建立 0~90℃ 的表就可以了

所以我用 excel

先在 A 欄 建立 0~179
b 欄 =tan(a1/2*pi())*512
c 欄 =dec2hex(b1,4)

然後將 C欄 的資料整理下來

0x0000,0x0004,0x0008,0x000D,0x0011,0x0016,0x001A,0x001F,
0x0023,0x0028,0x002C,0x0031,0x0035,0x003A,0x003E,0x0043,;0

0x0047,0x004C,0x0051,0x0055,0x005A,0x005E,0x0063,0x0068,
0x006C,0x0071,0x0076,0x007A,0x007F,0x0084,0x0089,0x008D,;1

0x0092,0x0097,0x009C,0x00A1,0x00A6,0x00AB,0x00B0,0x00B5,
0x00BA,0x00BF,0x00C4,0x00C9,0x00CE,0x00D4,0x00D9,0x00DE,

0x00E3,0x00E9,0x00EE,0x00F4,0x00F9,0x00FF,0x0104,0x010A,
0x0110,0x0115,0x011B,0x0121,0x0127,0x012D,0x0133,0x0139,

0x013F,0x0146,0x014C,0x0152,0x0159,0x015F,0x0166,0x016D,
0x0173,0x017A,0x0181,0x0188,0x0190,0x0197,0x019E,0x01A6,

0x01AD,0x01B5,0x01BD,0x01C4,0x01CD,0x01D5,0x01DD,0x01E5,
0x01EE,0x01F7,0x01FF,0x0209,0x0212,0x021B,0x0225,0x022E,

0x0238,0x0242,0x024C,0x0257,0x0262,0x026D,0x0278,0x0283,
0x028F,0x029B,0x02A7,0x02B3,0x02C0,0x02CD,0x02DB,0x02E8,

0x02F7,0x0305,0x0314,0x0323,0x0333,0x0343,0x0354,0x0365,
0x0376,0x0388,0x039B,0x03AE,0x03C2,0x03D7,0x03EC,0x0402,

0x0419,0x0431,0x0449,0x0463,0x047D,0x0499,0x04B6,0x04D4,
0x04F3,0x0513,0x0535,0x0559,0x057E,0x05A5,0x05CE,0x05FA,

0x0627,0x0657,0x068A,0x06C0,0x06F9,0x0736,0x0776,0x07BB,
0x0805,0x0854,0x08A9,0x0905,0x0968,0x09D4,0x0A4A,0x0ACA,

0x0B57,0x0BF3,0x0CA0,0x0D61,0x0E3B,0x0F31,0x1049,0x118D,
0x1307,0x14C5,0x16DC,0x1969,0x1C99,0x20B3,0x2629,0x2DCE,

0x3945,0x4C60,0x7294,0xE52D,

現在我們要棤 0.255 ,只要 *512=0x83 再去查表,

我們會發現資料會落在 0x007F(0x1c),0x0084(0x1d)
數值比較接近 0x1d =29 *0.5℃=14.5℃

tan(14.5℃)=0.25861758435589028187700082104918





更簡單方便的查表

先在 A 欄 建立 0~179
b 欄 =tan((a1+0.25)/2*pi())*1024
c 欄 =dec2hex(b1,4)

之後你發現 數直只能算到 88.5℃

然後你只要查表一,找到最接近的,就是了,不用再管是靠近上值,還是靠近下值

0x0004,0x000D,0x0016,0x001F,0x0028,0x0031,0x003A,0x0043,
0x004C,0x0055,0x005E,0x0067,0x0070,0x0079,0x0082,0x008B,

0x0094,0x009D,0x00A6,0x00AF,0x00B9,0x00C2,0x00CB,0x00D4,
0x00DE,0x00E7,0x00F1,0x00FA,0x0104,0x010D,0x0117,0x0120,

0x012A,0x0134,0x013D,0x0147,0x0151,0x015B,0x0165,0x016F,
0x0179,0x0183,0x018E,0x0198,0x01A2,0x01AD,0x01B7,0x01C2,

0x01CD,0x01D8,0x01E2,0x01ED,0x01F8,0x0204,0x020F,0x021A,
0x0226,0x0231,0x023D,0x0249,0x0255,0x0261,0x026D,0x0279,

0x0286,0x0292,0x029F,0x02AC,0x02B9,0x02C6,0x02D3,0x02E1,
0x02EE,0x02FC,0x030A,0x0318,0x0327,0x0335,0x0344,0x0353,

0x0362,0x0372,0x0382,0x0391,0x03A2,0x03B2,0x03C3,0x03D4,
0x03E5,0x03F7,0x0408,0x041B,0x042D,0x0440,0x0453,0x0467,

0x047B,0x048F,0x04A4,0x04B9,0x04CF,0x04E5,0x04FB,0x0512,
0x052A,0x0542,0x055B,0x0574,0x058E,0x05A8,0x05C4,0x05DF,

0x05FC,0x0619,0x0637,0x0656,0x0676,0x0697,0x06B9,0x06DB,
0x06FF,0x0724,0x074A,0x0771,0x079A,0x07C4,0x07EF,0x081C,

0x084A,0x087B,0x08AD,0x08E1,0x0917,0x094F,0x0989,0x09C6,
0x0A06,0x0A49,0x0A8E,0x0AD7,0x0B24,0x0B74,0x0BC8,0x0C21,

0x0C7E,0x0CE1,0x0D4A,0x0DB9,0x0E2E,0x0EAB,0x0F31,0x0FC0,
0x1058,0x10FC,0x11AD,0x126C,0x133B,0x141B,0x1511,0x161E,

0x1747,0x188F,0x19FD,0x1B96,0x1D64,0x1F71,0x21CB,0x2486,
0x27B9,0x2B88,0x3023,0x35D3,0x3D07,0x4671,0x5346,0x65CE,

0x82EB,0xB751,

同樣的 查 0.255 *1024 =261= 0x0105 <0x010D(0x1d)

0x1d *0.5 =14.5℃


發表於: 2008/6/26 18:17
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#6
資深會員
資深會員


查看用戶資訊
請問 Eigen 大大:

arctan(0.255) 0.255*2048 =0x020a ,比較到 0x0201(0x8e),0x021C(0x8f),

0x0201 為什麼等於 (0x8e)
0x021C 為什麼等於 (0x8f)

請問怎麼來的?謝謝。


發表於: 2008/6/26 15:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#5
資深會員
資深會員


查看用戶資訊
我是用泰勒方式計算, 誤差很小.

發表於: 2008/6/24 12:58
Thanks,
Edward Lee
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#4
資深會員
資深會員


查看用戶資訊
tab: -127/256~127/256 pi
0xAE84,0xD744,0xE4DA,0xEBA5,0xEFB9,0xF271,0xF463,0xF5D9,0xF6FC,0xF7E4,0xF8A3,0xF942,0xF9C9,0xFA3D,0xFAA1,0xFAF9,
0xFB47,0xFB8C,0xFBCA,0xFC02,0xFC35,0xFC63,0xFC8D,0xFCB4,0xFCD8,0xFCF9,0xFD18,0xFD35,0xFD4F,0xFD68,0xFD80,0xFD96,
0xFDAB,0xFDBE,0xFDD1,0xFDE3,0xFDF3,0xFE03,0xFE13,0xFE21,0xFE2F,0xFE3C,0xFE49,0xFE55,0xFE61,0xFE6C,0xFE76,0xFE81,
0xFE8B,0xFE95,0xFE9E,0xFEA7,0xFEB0,0xFEB8,0xFEC0,0xFEC8,0xFED0,0xFED7,0xFEDE,0xFEE6,0xFEEC,0xFEF3,0xFEFA,0xFF00,
0xFF06,0xFF0C,0xFF12,0xFF18,0xFF1E,0xFF23,0xFF29,0xFF2E,0xFF33,0xFF38,0xFF3D,0xFF42,0xFF47,0xFF4C,0xFF50,0xFF55,
0xFF59,0xFF5E,0xFF62,0xFF67,0xFF6B,0xFF6F,0xFF73,0xFF77,0xFF7B,0xFF7F,0xFF83,0xFF87,0xFF8B,0xFF8F,0xFF92,0xFF96,
0xFF9A,0xFF9D,0xFFA1,0xFFA4,0xFFA8,0xFFAB,0xFFAF,0xFFB2,0xFFB6,0xFFB9,0xFFBD,0xFFC0,0xFFC3,0xFFC7,0xFFCA,0xFFCD,
0xFFD0,0xFFD4,0xFFD7,0xFFDA,0xFFDD,0xFFE0,0xFFE4,0xFFE7,0xFFEA,0xFFED,0xFFF0,0xFFF3,0xFFF7,0xFFFA,0xFFFD,0x0000,
0x0003,0x0006,0x0009,0x000D,0x0010,0x0013,0x0016,0x0019,0x001C,0x0020,0x0023,0x0026,0x0029,0x002C,0x0030,0x0033,
0x0036,0x0039,0x003D,0x0040,0x0043,0x0047,0x004A,0x004E,0x0051,0x0055,0x0058,0x005C,0x005F,0x0063,0x0066,0x006A,
0x006E,0x0071,0x0075,0x0079,0x007D,0x0081,0x0085,0x0089,0x008D,0x0091,0x0095,0x0099,0x009E,0x00A2,0x00A7,0x00AB,
0x00B0,0x00B4,0x00B9,0x00BE,0x00C3,0x00C8,0x00CD,0x00D2,0x00D7,0x00DD,0x00E2,0x00E8,0x00EE,0x00F4,0x00FA,0x0100,
0x0106,0x010D,0x0114,0x011A,0x0122,0x0129,0x0130,0x0138,0x0140,0x0148,0x0150,0x0159,0x0162,0x016B,0x0175,0x017F,
0x018A,0x0194,0x019F,0x01AB,0x01B7,0x01C4,0x01D1,0x01DF,0x01ED,0x01FD,0x020D,0x021D,0x022F,0x0242,0x0255,0x026A,
0x0280,0x0298,0x02B1,0x02CB,0x02E8,0x0307,0x0328,0x034C,0x0373,0x039D,0x03CB,0x03FE,0x0436,0x0474,0x04B9,0x0507,
0x055F,0x05C3,0x0637,0x06BE,0x075D,0x081C,0x0904,0x0A27,0x0B9D,0x0D8F,0x1047,0x145B,0x1B26,0x28BC,0x517C,


TAB_H,TAB_L 組合成一個 16bit帶正負號的資料

將你的 數值,*256 之後, 和 TAB_H,TAB_L 做比較

ex: arctan(0.255) 0.255*256 =0x0041 ,比較到 0x0040 (0x93),0x0041,(0x94)

比較接近 0x93

所以arctan(0.255) = ((0x93+1)-128)/256 pi =20/256 pi =0.078125 pi

tan(0.0.078125 pi )= 0.25048696019130546159570216012472

大概是這樣做,主要的限制是tan是發散的,因此在 -90 及 90 會變成無限大,使得整個查表精度難以控制

上表以是 tan( 127/128 pin ) =82 下去建的

如果將角度限制在 -86~ 86 ,那查表值的精度會變成

-122/256~122/256 pi

0x938C,0xA31A,0xAEC6,0xB7DD,0xBF23,0xC519,0xCA12,0xCE48, ;0
0xD1E5,0xD508,0xD7C8,0xDA36,0xDC60,0xDE50,0xE010,0xE1A6,
0xE317,0xE46A,0xE5A1,0xE6BF,0xE7C9,0xE8BF,0xE9A4,0xEA7A, ;1
0xEB43,0xEBFF,0xECB0,0xED56,0xEDF4,0xEE89,0xEF16,0xEF9C,
0xF01B,0xF095,0xF108,0xF177,0xF1E1,0xF246,0xF2A7,0xF304, ;2
0xF35E,0xF3B4,0xF407,0xF457,0xF4A4,0xF4EF,0xF537,0xF57C,
0xF5C0,0xF601,0xF641,0xF67E,0xF6BA,0xF6F4,0xF72C,0xF763, ;3
0xF799,0xF7CD,0xF800,0xF832,0xF862,0xF892,0xF8C0,0xF8ED,
0xF919,0xF945,0xF96F,0xF999,0xF9C2,0xF9EA,0xFA11,0xFA38, ;4
0xFA5E,0xFA83,0xFAA8,0xFACC,0xFAEF,0xFB12,0xFB34,0xFB56,
0xFB78,0xFB99,0xFBB9,0xFBD9,0xFBF9,0xFC18,0xFC37,0xFC56, ;5
0xFC74,0xFC92,0xFCB0,0xFCCD,0xFCEA,0xFD07,0xFD23,0xFD3F,
0xFD5B,0xFD77,0xFD93,0xFDAE,0xFDC9,0xFDE4,0xFDFF,0xFE1A, ;6
0xFE34,0xFE4E,0xFE69,0xFE83,0xFE9D,0xFEB6,0xFED0,0xFEEA,
0xFF03,0xFF1D,0xFF36,0xFF50,0xFF69,0xFF82,0xFF9B,0xFFB5, ;7
0xFFCE,0xFFE7,0x0000,0x0019,0x0032,0x004B,0x0065,0x007E,
0x0097,0x00B0,0x00CA,0x00E3,0x00FD,0x0116,0x0130,0x014A, ;8
0x0163,0x017D,0x0197,0x01B2,0x01CC,0x01E6,0x0201,0x021C,
0x0237,0x0252,0x026D,0x0289,0x02A5,0x02C1,0x02DD,0x02F9, ;9
0x0316,0x0333,0x0350,0x036E,0x038C,0x03AA,0x03C9,0x03E8,
0x0407,0x0427,0x0447,0x0467,0x0488,0x04AA,0x04CC,0x04EE,
0x0511,0x0534,0x0558,0x057D,0x05A2,0x05C8,0x05EF,0x0616,
0x063E,0x0667,0x0691,0x06BB,0x06E7,0x0713,0x0740,0x076E,
0x079E,0x07CE,0x0800,0x0833,0x0867,0x089D,0x08D4,0x090C,
0x0946,0x0982,0x09BF,0x09FF,0x0A40,0x0A84,0x0AC9,0x0B11,
0x0B5C,0x0BA9,0x0BF9,0x0C4C,0x0CA2,0x0CFC,0x0D59,0x0DBA,
0x0E1F,0x0E89,0x0EF8,0x0F6B,0x0FE5,0x1064,0x10EA,0x1177,
0x120C,0x12AA,0x1350,0x1401,0x14BD,0x1586,0x165C,0x1741,
0x1837,0x1941,0x1A5F,0x1B96,0x1CE9,0x1E5A,0x1FF0,0x21B0,
0x23A0,0x25CA,0x2838,0x2AF8,0x2E1B,0x31B8,0x35EE,0x3AE7,
0x40DD,0x4823,0x513A,0x5CE6,0x6C74,0x8237,


ex: arctan(0.255) 0.255*2048 =0x020a ,比較到 0x0201(0x8e),0x021C(0x8f),

比較接近 0x8e

所以arctan(0.255) = ((0x8e+6)-128)/256 pi =20/256 pi =0.078125 pi

tan(0.0.078125 pi )= 0.25048696019130546159570216012472

發表於: 2008/6/24 11:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#3
資深會員
資深會員


查看用戶資訊
我需要的是 arc tan 反三角函數,請問有辦法用查表的方式嗎?

發表於: 2008/6/24 9:19
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問是否能用C語言以四則運算實現反三角函數的計算
#2
資深會員
資深會員


查看用戶資訊
三角反三角
用建表查表方式不是也可以嗎?
還是您需要比較精確結果


發表於: 2008/6/24 9:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


請問是否能用C語言以四則運算實現反三角函數的計算
#1
資深會員
資深會員


查看用戶資訊
大大們好:
請問是否能用C語言以四則運算實現反三角函數運算,,並且不用內建的函數庫般的使用浮點數運算,因為 16F 系列的 PIC 堆疊實在不夠用,編譯的時候常常會OVERFLOW,所以想找看看有無以手算的方式或是範例程式可用。

謝謝。

發表於: 2008/6/23 17:32
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------