因此。我有一个功能,它可以正常工作,但从长远来看它可能会有点沉重,我想知道是否有更好的方法来做到这一点:
float getPval(float i) {
float retunrVal = 0;
for(int j = 0; j < i-1; j++) {
returnVal += (100 - returnVal)/2;
}
returnVal += ((100-returnVal)/2)*(i - (int)i);
Return returnVal;
}
基本上,如果我写:
getPval(1) I'll get 50 back.
getPval(1.5) would return 62,5
getPval(2) would return 75.
getPval(3) 87.5
getPval(4) 93.75
getPval(4.2) 94.375
依旧...... 无论数字有多高,它都不会返回100,但会越来越近。
是否有更好的功能而不是我的getPval(flaot)?
现在,愚蠢的表达我知道,但我不知道该怎么称呼这样的公式...
答案 0 :(得分:1)
因此,在循环的每个步骤中,它找到returnVal
和100之间差异的一半。然后将此值添加到返回值。
另一种思考方式是找到100(1 - 0.5 ^ i)。在java中,您可以将其实现为
returnVal = 100. * ( 1.0 - Math.pow(0.5,Math.floor(i)) );
returnVal += ((100-returnVal)/2)*(i - (int)i);
您甚至可能会发现使用
更好returnVal = 100. * ( 1.0 - Math.pow(0.5,i) );
将为非整数参数提供不同的结果。