2011-10-20 14 views
1

私は、n番目の数字のベンフォーズの法則を見つける方法を理解するアプリケーションを作成しようとしていますが、今まで私はそれを行うことができませんでした。私は最初のポジションの番号のためにそれを見つけることができますが、その後はわかりません。ここではベンフォードの法則上のリソースは次のとおりです。Benfords Law in Java

http://www.mathpages.com/home/kmath302/kmath302.htm

私は一番下(最後の式)でやろうとしていますが、私はコードにそれを得るように見えることはできません何のため数理式があります。

これは私が任意の位置での最初の数字のためにそれをやった方法です:

public static double probability(int position, int digit) 
{ 
    double result = Math.log(1+(1/(double) digit))/Math.log(10); 
    return result; 
} 

任意のアイデアそれの総和一部を実装する方法?私はそれがforループを含むとはかなり確信していますが、試してもうまくいかないようです。

EDIT --------------------------------------------- -------------------------------------------

tskuzzyのおかげで答え私はそれを理解した。うん、それだけのためにループです

public static double probability(int position, int digit) { 
double p = 0.0; 

for(int k = (int) Math.pow(10,position-1); k < Math.pow(10,position); k++) 
{ 
    p += Math.log(1+1.0/(k*10 + digit)); 
} 

return p/Math.log(10); 
} 

答えて

2

:これは、Javaでそれを行うだろうかある素晴らしいアイデアのthats

public static double probability(int position, int digit) { 
    double p = 0.0; 

    for(int k = Math.pow(10,position-1); k < Math.pow(10,position); k++ { 
     p += Math.log(1+1.0/(k*10 + digit)); 
    } 

    return p/Math.log(10); 
} 
+0

ていますが、ループのために、二重を使用することはできませんし、あなたがkとして整数をキャストすると、数学的には機能しないので、正解を返しません... – Rmyers

+0

私は間違った方法で試してみました...これは実際に正しい答えです。ありがとう! – Rmyers