[問題] double轉int資料流失

看板C_and_CPP作者 (魯)時間15年前 (2010/05/09 04:04), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我並不是主修CS的學生 每次寫程式碰到running error都要debug超久才發現 根本就是我的死穴... 我寫了一個對C(n,i)取自然對數的函式 因為用的時候n通常很大 這樣比較方便... 但是再取exp 存成int 時常就會有出錯的情形 譬如說我用int i=exp(logC(20,2)); double d=exp(logC(20,2)); i無論電腦存的值或output都會是189 而d存的值會是189.999999999...7 output會顯示190 這種情況有辦法改善嗎 如果用cmath中的ceil,floor 是不是也會有類似的狀況? ( 如int k=ceil(log(.../...)+...*...)之類的運算? ) 難道只能再多寫一個四捨五入的函式嗎?? 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++,vista 有問題的code: (請善用置底文標色功能) logC是這樣寫的 double logC(int &n,int i) { if(i>n||i<0) {cout<<"Error!"<<endl;return 0;} else if(i==0||i==n) return 0; else if(i==1||i==n-1) return log(n*1.0); else if(i<n-i) return logC(n,n-i); else { double x=0,y=0; for(int j=i+1;j<=n;j++) x+=log(j*1.0); for(int j=1;j<=n-i;j++) y+=log(j*1.0); return x-y; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.233.41.117 ※ 編輯: i3koala 來自: 118.233.41.117 (05/09 04:05)

05/09 04:43, , 1F
是的,多寫一個四捨五入的函式吧。DOUBLE轉INT本來就是會
05/09 04:43, 1F

05/09 04:44, , 2F
有無條件捨去的問題,使用ceil或floor不過是將無條件捨去
05/09 04:44, 2F

05/09 04:45, , 3F
改成無條件進位,如果你原意是打算如此的話,可以用
05/09 04:45, 3F

05/09 04:48, , 4F
你可以讀一下這篇文章 http://0rz.tw/3450A
05/09 04:48, 4F

05/09 09:33, , 5F
(int)(d+0.5)
05/09 09:33, 5F
文章代碼(AID): #1BvSFdIB (C_and_CPP)