[問題] double的用法

看板C_and_CPP (C/C++)作者 (呈呈)時間14年前 (2011/09/16 23:17), 編輯推噓1(1012)
留言13則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 想請問為何我這個方程式,假如我把float改成double卻跑出錯誤 餵入的資料(Input): /*prog*/ #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { float a,b,c,d,e,f,g; /*用double很奇怪跑不出來*/ printf("ax^2+bx+c=0\n請輸入a/b/c來判斷實根:\n"); scanf("%f/%f/%f",&a,&b,&c); e=(-b+sqrt(b*b-4*a*c))/(2*a); f=(-b-sqrt(b*b-4*a*c))/(2*a); g=-b/(2*a); if((b*b-4*a*c)>0.0) printf("方程式有兩個實根%5.2f,%5.2f",e,f); else if((b*b-4*a*c)==0.0) printf("方程式有兩個相等實根%5.2f",g); else if((b*b-4*a*c)<0.0) printf("沒有實根"); system("pause"); return 0; } 預期的正確結果(Expected Output): 這是在求方程式的答案 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 謝謝各位大大 -- 小本經營賣場 http://tw.user.bid.yahoo.com/tw/user/Y2286184456 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.25.238

09/16 23:20, , 1F
double 的話,%f 改成 %lf (小寫英文字母 L)
09/16 23:20, 1F

09/16 23:23, , 2F
改成double的話,printf跟scanf都要改
09/16 23:23, 2F

09/16 23:23, , 3F
...輸給一樓了 XD
09/16 23:23, 3F

09/16 23:30, , 4F
樓上,printf() 用 double 還是 %f 阿... 只有scanf 要改
09/16 23:30, 4F

09/16 23:32, , 5F
printf雖用%f可過,但為方便trace/matain,還是改較好
09/16 23:32, 5F

09/16 23:38, , 6F
咦,我還以為 printf 一定要改,感謝 XDD
09/16 23:38, 6F

09/17 01:28, , 7F
http://ppt.cc/uo38 http://ppt.cc/qXke 我怎麼記得lf 是給
09/17 01:28, 7F

09/17 01:28, , 8F
long double 用的 @@?
09/17 01:28, 8F

09/17 01:44, , 9F
long double 是用 %llf, 若用%lf 幸運不出包的話,代表
09/17 01:44, 9F

09/17 01:44, , 10F
很可能該compiler sizeof(double)=sizeof(long double)
09/17 01:44, 10F

09/17 01:44, , 11F
就像 int / long int 的問題是一樣的...
09/17 01:44, 11F

09/17 02:49, , 12F
感謝 樓上補充:)
09/17 02:49, 12F

09/17 10:43, , 13F
很謝謝各位大大幫忙解答^^
09/17 10:43, 13F
文章代碼(AID): #1ESsX-3F (C_and_CPP)
文章代碼(AID): #1ESsX-3F (C_and_CPP)