線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1724
推到 Plurk!
推到 Facebook!

數學函式上的誤差

答題得分者是:GGL
cloud741019
一般會員


發表:1
回覆:1
積分:0
註冊:2007-10-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-12 11:55:57 IP:140.118.xxx.xxx 訂閱
我要做一些圖形上判斷,有需要使用到一些三角函數以及開根號.
昨天在測試的時候發現,好像使用三角函數會有些誤差.

我pi的定義:
[code cpp]
const double pi=asin(1)*2;
[/code]

以下是我的測試檔:
[code cpp]
double x1,y1,x2,y2;
x1=100;
y1=100;
for(int i=0;i<=7;i )
{
x2=x1 cos(pi*i/4);
y2=y1 sin(pi*i/4);
}
[/code]

其中當i=6的時候,cos(3*pi/2)應該是等於0,但是最後的結果x1不等於x2.
這是不是因為程式上的誤差所造成?

因為我之後還要加入,判斷一個已知的點在一條已知的線上的左邊,右邊或者是在線上.
可能還需要使用到根號,其判斷的方式大概就是先求出線的線性方程式a,b.
再將x帶入y=ax b,求y是否相同,其中可能需要根號或者是tan去求斜率a.
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-12 12:05:33 IP:59.105.xxx.xxx 未訂閱
要換成cos(180*3*pi/2)..角度跟弧度的不同

而且,我這樣算出來是1不是0...以及,為什麼不直接用M_PI就好

希望我沒誤解你的問題
cloud741019
一般會員


發表:1
回覆:1
積分:0
註冊:2007-10-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-12 13:17:47 IP:140.118.xxx.xxx 訂閱
讓你看笑話啦,我不知道有M_PI可以使用,只想說用暴力法創出來.

cos的270度不是等於0嗎? M_PI的使用方法好像錯誤了.

[code cpp]
ShowMessage("test=" FloatToStr(cos(M_PI)));//180度
ShowMessage("test=" FloatToStr(cos(M_PI/6)));//30度
ShowMessage("test=" FloatToStr(cos(M_PI/4)));//45度
ShowMessage("test=" FloatToStr(cos(M_PI/3)));//60度
ShowMessage("test=" FloatToStr(cos(M_PI/2)));//90度
[/code]

結果分別為
-1
0.866025403784439
0.707106781186548
0.5
6.12303176911169E-17
前四個值都對,最後一個90反而不是0,是近似0.
編輯記錄
cloud741019 重新編輯於 2007-10-12 13:34:42, 註解 無‧
cloud741019 重新編輯於 2007-10-12 15:17:04, 註解 無‧
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-12 14:23:14 IP:59.105.xxx.xxx 未訂閱
真的是1,弄錯了


真是奇怪,以前都沒注意到,我把cos(pi/2)改成sin(pi/2)出來的值是正確的
系統時間:2024-05-02 17:04:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!