奇怪的c ++算术

时间:2012-08-02 11:38:55

标签: c++

我对这个实验中h的价值感到有些困惑。在cpp中,

int h,J=3,n=200,p=3,h_m=(n+p+1)/2;
float rt=(float)h_m/n;

for(int j=0,j<J,j++){
   h=floor((j+1)/J*rt*(n-p-1)+p+1);
   std::cout<<h<<" "<<j<<" "<<rt<<" "<<n-p-1<<" "<<h_i<<" "<<J<<std::endl;
}

给出:

4 0 0.51 196 7  3
4 1 0.51 196 7  3
103 2 0.51 196 7  3

我想要(这是在R中):

n<-200
p<-3
h_m<-as.integer((n+p+1)/2)
J<-3
j<-0:(J-1)
rt<-h_m/n
floor((j+1)/J*rt*(n-p-1)+p+1)
[1]  37  70 103

cpp构造中有什么问题?

1 个答案:

答案 0 :(得分:5)

这个

(j+1)/J

是整数除法,因此被截断。将其中一个操作数强制转换为float:

(j+1)/(float)J