close
標題:

ACM第476題

發問:

 

此文章來自奇摩知識+如有不便請留言告知

這題我把所有會出現小數的變數都宣告成 float的型態題目你有說到當輸入的點為 9999.9和9999.9時就會跳出現在我這樣寫float a,b;while(1){ scanf("%f%f",&a,&b); if(a==9999.9 && b=9999.9) break; .............以下省略當我輸入9999.9 9999.9 這兩數時她卻沒有跳出後來我用printf("%f%f",a,b); 才發現a=9999.900391... 顯示更多 這題我把所有會出現小數的變數都宣告成 float的型態 題目你有說到當輸入的點為 9999.9和9999.9時 就會跳出 現在我這樣寫 float a,b; while(1){ scanf("%f%f",&a,&b); if(a==9999.9 && b=9999.9) break; .............以下省略 當我輸入9999.9 9999.9 這兩數時 她卻沒有跳出 後來我用printf("%f%f",a,b); 才發現a=9999.900391 b=9999.900391 真的不等於9999.9耶 但把a,b 宣告成double就可以了 為什麼會這樣啊? 還有這一題有小數的變數都要用double的型態嗎?

最佳解答:

你的問題出在不止二個地方: 0. y == 9999.9,不是 y=9999.9 A. 9999.9 是 double,z.9 在 float 和 double 是不同的! 所以,你的判斷都不成立! 解決這個,至少有二個辦法: 1. 如你所說:改用 double (建議) 2. 改成 x == (float) 9999.9 ... (最不建議) 3. 改成 x == 9999.9f B. 現代的 CPU,double 比 float 快! 若不是為了省 RAM(如:你有一百萬個 小數). 不要用 float! 會有很多問題,你遇到的只是其中之一! C. 這較難半點,卻是 A. 的真正原因! 參敝人評論: http://tw.knowledge.yahoo.com/question/article?qid=1708101909351 這有半點離題:比你問的深;搞懂它卻是完全弄懂的方法! 或找不少人問過 float 準度問題,參敝人回答: http://tw.knowledge.yahoo.com/my/my_answer?field=srp&p=epsilon&show=AC01988579

其他解答:7C4150FCDCEDD023
arrow
arrow

    gpjqem1 發表在 痞客邦 留言(0) 人氣()