我试图找到 1 /(2 ^ n)的值,其中 0< = n< = 200
我曾尝试使用biginteger,但它将输出设为零。我想在分裂后获得确切的数字。
import java.math.BigInteger;
public class Problem2 {
public static void main(String args[]){
BigInteger bi1 = new BigInteger("2").pow(200);
BigInteger bi2 = BigInteger.ONE;
BigInteger bi3 = bi2.divide(bi1);
System.out.println(bi3); //why it giving output zero
}
}
在使用BigDecimal时,它会给出指数值,但是如何在没有指数的情况下获得精确值。
答案 0 :(得分:3)
因为0< bi3< 1,因此整数结果为0.尝试BigDecimal
代替BigInteger
答案 1 :(得分:3)
BigInteger与Integer类似,因为两个整数之间的计算结果是整数。
如果我们写int n = 1 / 1024
,结果同样为0。
试试这个:
BigDecimal b = new BigDecimal( new BigInteger("2").pow(200) );
BigDecimal one = new BigDecimal(1);
BigDecimal quotient = one.divide(b);
System.out.println(quotient); //scientific notation. (140 significant digits)
System.out.println(quotient.toPlainString()); //regular notation with leading zeros
答案 2 :(得分:1)
1 /(2 ^ 200)的结果将非常小,绝对不是整数,所以你得到的零结果是“正确的”。
答案是如此之小,即使Java双(64位)也会耗尽精度。你可能会哄BigDecimal给出正确的答案,但性能几乎肯定会很糟糕。
为什么你需要这么精确?估计宇宙中的原子数约为10 ^ 38,我认为它大约是2 ^ 150。如果我们知道你想要做什么,我们可以提供更好的帮助。
答案 3 :(得分:0)
如果得到小数点的结果,请尝试使用float / Double。