[問題] double轉int資料流失
遇到的問題: (題意請描述清楚)
我並不是主修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
05/09 04:43, 1F
→
05/09 04:44, , 2F
05/09 04:44, 2F
→
05/09 04:45, , 3F
05/09 04:45, 3F
推
05/09 04:48, , 4F
05/09 04:48, 4F
→
05/09 09:33, , 5F
05/09 09:33, 5F