[問題] 在DVE C上奇怪的問題

看板C_and_CPP作者 (Alice)時間13年前 (2010/11/27 11:04), 編輯推噓4(409)
留言13則, 7人參與, 最新討論串1/1
在運算上需要10的0次方到5次方 但始終失敗 後來找出是在算pow函式時出了問題 於是寫了段簡短版的來試 DEV上跑這段程式 #include<stdlib.h> #include<stdio.h> #include<math.h> int main() { double i; for(i=0;i<=5;i++) { printf("%d\n",(int)pow((float)10,i)); } system("pause"); } 竟然出現 1 10 99 1000 9999 100000 想了很久還是沒找到答案 同樣的程式丟到Visual C 就解決了 囧... 怎麼會這樣...浪費了我寶貴的青春... Dev C真是跟我有仇...被他整了好幾次 還是跳到Visual好了 -- █████████████i██ 選項 ┌─╥─┐◣。┌─╥─┐〒 〒┌─╥─┐ 頂可愛的口卡口卡獸回列表 ╞╦╩╦╡ ◤ ▎ ╞╦╩╦╡▼▼▼▼╞╦╩╦╡ 頂問號回答問題 ╞╩╦╩╡ ╞╩╦╩╡▲▲▲▲╞╩╦╩╡ DOOHDLIHCψ └─╨─┘。 ˙ 。└─╨─┘╨─┘ ︴︴ 口卡口卡,別頂錯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.73.175.7

11/27 12:00, , 1F
為什麼要強制轉換型態呀!?
11/27 12:00, 1F

11/27 12:03, , 2F
把%d換成%f試試看
11/27 12:03, 2F

11/27 12:04, , 3F
並且把(int)刪掉
11/27 12:04, 3F

11/27 12:09, , 4F
pow的回傳值是浮點數型態 所佔記憶體較int大 所以強制轉
11/27 12:09, 4F

11/27 12:10, , 5F
int型態會錯誤
11/27 12:10, 5F

11/27 12:11, , 6F
因為浮點數的誤差阿...算整數怎麼會用 pow 呢? 自己寫
11/27 12:11, 6F

11/27 12:11, , 7F
一個迴圈來算吧...
11/27 12:11, 7F

11/27 16:01, , 8F
printf("%0.f\n",pow(10,i));//這樣應該就可以了吧?
11/27 16:01, 8F

11/27 16:03, , 9F
另外 把double當作loop的counter基本上會有問題
11/27 16:03, 9F

11/27 18:20, , 10F
你就用VC++吧!除錯也比較快。
11/27 18:20, 10F

11/27 18:25, , 11F
這問題看超過五次了 = = 我用linux下gcc 是沒這問題
11/27 18:25, 11F

11/27 18:39, , 12F
等一下,會不會是你上面程式碼貼錯?
11/27 18:39, 12F

11/27 18:40, , 13F
才六個數.. const int pow10[6] 直接填進去比較快
11/27 18:40, 13F
文章代碼(AID): #1Cy7Kihi (C_and_CPP)