Java 爪哇的本福德定律

Java 爪哇的本福德定律,java,math,benfords-law,Java,Math,Benfords Law,我正在尝试创建一个应用程序,它将找出如何在第n个位置的数字上找到benfords定律,但到目前为止,我还没有做到这一点。我可以找到第一个位置的号码,但之后我不确定。以下是有关本福德法律的资源: 有一个数学公式,我试图在最底层做什么(最后一个公式),但我似乎无法将它编入代码 这是我在任何给定位置对第一个数字所做的操作: public static double probability(int position, int digit) { double result = Math.l

我正在尝试创建一个应用程序,它将找出如何在第n个位置的数字上找到benfords定律,但到目前为止,我还没有做到这一点。我可以找到第一个位置的号码,但之后我不确定。以下是有关本福德法律的资源:

有一个数学公式,我试图在最底层做什么(最后一个公式),但我似乎无法将它编入代码

这是我在任何给定位置对第一个数字所做的操作:

public static double probability(int position, int digit)
{   
    double result = Math.log(1+(1/(double) digit))/Math.log(10);
    return result;
}
有没有办法实现它的求和部分?我很确定这将涉及到for循环,但当我尝试它时,它似乎不起作用

编辑----------------------------------------------------------------------------------------

多亏了tskuzzy的回答,我才明白。以下是您在Java中的实现方式:

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);
}
公共静态双概率(整数位置,整数位数){
双p=0.0;
对于(int k=(int)Math.pow(10,位置-1);k
是的,这只是一个for循环:

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);
}
公共静态双概率(整数位置,整数位数){
双p=0.0;
对于(int k=数学功率(10,位置-1);k<数学功率(10,位置);k++{
p+=数学对数(1+1.0/(k*10+位数));
}
返回p/Math.log(10);
}

这是个好主意,但不能在for循环中使用double,如果将k转换为int,它在数学上不起作用,因此不会返回正确的答案…等等,我尝试了错误的方法…这实际上是正确的答案。谢谢!