首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的Benford's Law程序

Java的Benford's Law程序
EN

Stack Overflow用户
提问于 2017-08-12 23:02:40
回答 1查看 203关注 0票数 1

我正在用Java做一个程序,看看Benford定律是否真的是真的。我正在使用BigDecimal,但是自从我实现它之后就出现了一个错误。

代码语言:javascript
复制
import java.lang.*;
import java.math.BigDecimal;

public class BenfordLaw {
    public static int oneornot(BigDecimal number) {
        String str2num = number.toString();
        if(str2num.startsWith("1")) {
            return 1;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        int n = 0;
        long sum = 0;
        for (int i = 0; i < 10000; i++) {
            BigDecimal number = BigDecimal.valueOf(Math.pow(2,n));
            System.out.println(number);
            double newnum = oneornot(number);
            sum += newnum;
            n+=1;
        }
        System.out.println(sum);
        System.out.println(sum*0.0001);
     }
}

如果您运行此程序,则会出现错误。错误在下面的链接中。https://pastebin.com/ShJmGjdJ

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-12 23:47:32

您的程序会抛出异常,因为有以下行:

代码语言:javascript
复制
BigDecimal number = BigDecimal.valueOf(Math.pow(2,n));

变量n在每次迭代时递增1,最多可达9999。由于Math.pow(2,n)变得如此之大,以至于在某一点上它超过了类型的最大值。最终,Double.toString (由BigDecimal.valueOf使用)返回导致Double.toString的“无限性”

请将上述一行替换为以下内容以解决问题:

代码语言:javascript
复制
BigDecimal number = BigDecimal.valueOf(2).pow(n));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45655649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档