[問題] 二元一次方程式判斷求解

看板C_and_CPP (C/C++)作者 (專心致志)時間15年前 (2010/12/08 23:34), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串1/1
遇到的問題(Question): 輸出的結果跟答案差太多 餵入的資料(Input): 1 3 -10 希望的正確結果(Expected Output): Two different roots x1=2 , x2=-5 跑出來的錯誤結果(Wrong Output): Two different roots x1=1.949747 , x2=-7.949747 開發平台(Platform): (例: VC++, Gcc, OpenGL, Linux, ...) Dev C++ 程式碼(Code): (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { double a,b,c,x,y; while(scanf("%lf %lf %lf",&a,&b,&c)!=EOF) { x=(b*b)-(4*a*c); if(x>0) { x=(-b)+sqrt(((b*b)-(4*a*c))/(2*a)); y=(-b)-sqrt(((b*b)-(4*a*c))/(2*a)); if(x<y) printf("Two different roots x1=%lf , x2=%lf\n",y,x); else printf("Two different roots x1=%lf , x2=%lf\n",x,y); }else if(x==0) { printf("Two same roots x=%.0lf\n",(-b)/(2*a)); }else { printf("No real root \n"); } } return 0; } 補充說明(Supplement): x1的輸出雖然有誤差但尚可接受 不過x2真的是差太多了 請問有可能是在計算過程中精準度遺失導致這樣嗎? 還是說我有哪裡寫錯了? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.119.126.2

12/08 23:36, , 1F
2*a在根號裡?
12/08 23:36, 1F

12/08 23:40, , 2F
sqrt 括號怪怪的
12/08 23:40, 2F

12/08 23:43, , 3F
真的耶= = 不好意思寫程式寫頭都暈了…已經AC 感謝
12/08 23:43, 3F
文章代碼(AID): #1C_wMKtX (C_and_CPP)
文章代碼(AID): #1C_wMKtX (C_and_CPP)