[問題] 關於C語言開根號

看板C_and_CPP作者 (有點悶呀......)時間13年前 (2010/10/12 15:14), 編輯推噓0(008)
留言8則, 6人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 題目:要用逼近法將輸入之變數Z(限定範圍1~1023)開根號, 找出一個Y使得Y*Y與Z的相差小於0.01,也就是Z-Y*Y<0.01 我是先用Z本身當起始,也就是令Y=Z, 若相差大於0.01,且Y>=Z時,令Y=Y/2, 若相差大於0.01,且Y<Z時,令Y=Y+(Z-Y)/2 希望得到的正確結果: 如題目 程式跑出來的錯誤結果: compiler沒有問題,但是跑不出結果。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) /*開根號運算*/ #include<stdio.h> #include<stdlib.h> int main(void) { int z; do { printf("輸入一個整數(1~1023):"); scanf("%d",&z); } while(z<1||z>1023); double a=z; double b=z; double x; double y; do { double c=b*b; if(a<=c) { x=c-a; if(b>=a) { y=b; b=b/2; } else{ y=b; b=b+(a-b)/2;} } else { x=a-c; if(b>=a) { y=b; b=b/2; } else{ y=b; b=b+(a-b)/2;} } } while(x>0.01); printf("%d開根號等於%f",z,y); return 0; } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.121.138

10/12 15:27, , 1F
請善用 debugger 找程式的邏輯錯誤
10/12 15:27, 1F
※ 編輯: edd740404 來自: 140.114.121.138 (10/12 15:29)

10/12 15:48, , 2F
算開根號怎麼會用逼近法?
10/12 15:48, 2F

10/12 15:50, , 3F
我也有看過用除法來算根號的方法
10/12 15:50, 3F

10/12 18:09, , 4F
樓上說的是直式開根號,可開1/n次方,http://ppt.cc/Pn~3
10/12 18:09, 4F

10/12 18:17, , 5F
10/12 18:17, 5F

10/12 18:17, , 6F
數字不大的話用逼近的就可以了 //以前寫題目常常用XD
10/12 18:17, 6F

10/12 18:17, , 7F
見下篇推文
10/12 18:17, 7F

10/12 18:23, , 8F
謝謝,感覺很厲害^^
10/12 18:23, 8F
文章代碼(AID): #1Cj0h9H8 (C_and_CPP)
文章代碼(AID): #1Cj0h9H8 (C_and_CPP)