Fzu 2036 Log Calculator(JAVA 浮点数输出精度控制)

来源:互联网 发布:自学机器人编程 编辑:程序博客网 时间:2024/05/22 15:51

Java高精度题:

给定a,b,求s=log2(2a+2b);


解析:

a>b
a=log2(x)   x=2^a
b=log2(y)   y=2^b

log2(x+y) = b+log2(1+2^(a-b));

在a-b > 32时,log2(1+2^(a-b)) 近似等于 log2(2^(a-b))


总结:之前对于Java的高精度不太熟练,通过这题加强了Java高精度的练习,

还有本来这题还是可以做出来的,因为没有听方敏霞同学,话没完成这题,留此句以警示自己。


import java.util.Scanner;import java.math.*;public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);int t , cas = 1;BigDecimal a,b,sum,beta;t = cin.nextInt();while(t-- != 0) {a = cin.nextBigDecimal();b = cin.nextBigDecimal();if(a.compareTo(b) > 0) {BigDecimal tmp = a;a = b;b = tmp;}beta = a.subtract(b);if(beta.compareTo(BigDecimal.valueOf(32)) > 0) {sum = b.add(beta);}else {double x = beta.doubleValue();double cnt = Math.pow(2.0, x) + 1;double s = Math.log(cnt) / Math.log(2.0);sum = b.add(BigDecimal.valueOf(s));}sum = sum.setScale(9, BigDecimal.ROUND_HALF_UP);System.out.println("Case " + (cas++) + ": "+sum);}}}


1 0