我对 C 语言比较陌生,所以当谈到精度问题时,我总是有点担心。我正在使用一个相当大的代码,并且在特定点我需要根据离散概率分布选择一个值。本质上,我需要做的是选择一个值 k=1,2,...N,其概率由公式给出
P(k) = [e a*F(k) ]/[Σ i=1,...,N e aF(i) ],
其中 F 只是一些使用 k 作为输入的函数,而 a 是一个实数。[抱歉,公式看起来很粗糙,我不确定如何格式化。] 到目前为止,我的代码看起来(大致)像这样。我不得不做出一些改变以帮助脱离上下文的可读性。
int k;
int N=10;
double a=5.5; //In the code it is just a positive real number
double xtemp=0;
double X[10];
double fk;
for(k=0;k<N;k++){
fk = F(k); // Here F returns a double
xtemp += exp(a*fk);
X[k]=xtemp;
}
xtemp = xtemp*U01(); //U01 returns a uniformly random number on [0,1]
for(k=0;k<K;k++){
if(xtemp<=X[k]){
return k;
}
}
从数学角度来看,这应该会给出预期的结果,但是比我更擅长编码的人说 xtemp 可能会出现问题并且变得不精确。我想知道您如何为此进行错误处理?我也愿意以更好的方式来实现这个想法。我感谢任何帮助和建议。