看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) DEV-C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 目前已知a,b,c變數宣告為單精度浮點數float答案是正確的 可是為什麼不能把a,b,c變數宣告為double倍精度浮點數? 餵入的資料(Input): a=1,b=6,c=2 預期的正確結果(Expected Output): 此方程式有兩個實根:x=-0.354248762,x=-5.645751 錯誤結果(Wrong Output): 沒有實根 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) #include<stdio.h> #include<stdlib.h> #include<math.h> int main (void) { double a,b,c; double value,r1,r2; printf("請輸入a,b,c的值:"); scanf("%f,%f,%f",&a,&b,&c); value = b*b-4*a*c; r1=(-b+(float)(sqrt(b*b-4*a*c)))/(2*a); r2=(-b-(float)(sqrt(b*b-4*a*c)))/(2*a); if(value>0) { printf("此方程式有兩個實根:x=%f,x=%f\n",r1,r2); } else if(value==0) { r1=(-b)/(2*a); printf("此方程式有兩個相等實根:x=%f\n",r1); } else { printf("沒有實根\n"); } system("pause"); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.139.5 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1546443301.A.A8D.html
Schottky: scanf 寫錯了,double float 要用 %lf 01/03 00:08
Schottky: 我記得這樣寫會有Warning? 01/03 00:09
PanYX: 因為我是使用dev-c++沒測試過其他編譯器,他是沒有警告的 01/03 00:26
PanYX: 所以以後如果是double就要用%lf這樣資料比較不會出錯嗎? 01/03 00:28
Schottky: 可能要開 -Wall 選項吧,我習慣Warning全開所以不太確定 01/03 00:34
Schottky: 你可以讀一下 scanf 的 man page 或說明網頁 01/03 00:34
PanYX: 好的 我再去看看資料 謝謝S大 01/03 00:42
KALR: 題外話,double 或 float 變數不要跟0做比較 01/03 02:33
Schottky: 應該說不要做 float == 0 的判斷,比大小是可以的 01/03 03:14
PanYX: 又學到了一課 謝謝 01/03 04:06
Gway: 推文講的好! 01/09 07:15