【问题标题】:Benfords Law in JavaJava中的本福德定律
【发布时间】:2011-10-20 19:32:53
【问题描述】:

我正在尝试创建一个应用程序,该应用程序将弄清楚如何在第 n 位的数字上找到本福德定律,但到目前为止我还无法做到。我可以在第一个位置找到它,但之后我不确定。这是本福德定律的资源:

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 循环,但是当我尝试它时它似乎并没有成功。

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

感谢 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);
}

【问题讨论】:

    标签: java math benfords-law


    【解决方案1】:

    是的,它只是一个 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);
    }
    

    【讨论】:

    • 这是个好主意,但你不能在 for 循环中使用双精度,如果你将 k 转换为 int 它在数学上不起作用,因此不会返回正确的答案.. .
    • 等等,我试错了……这实际上是正确的答案。谢谢!
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2016-01-10
    相关资源
    最近更新 更多