首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何完成高精度整数运算?

问题阐述

Java中基本类型都有取值范围,例如short类型的范围是-32768~32767。如果我想计算一些超过基本类型范围的数值,该如何实现?

专家解答

对于整数,可以使用BigInteger类实现高精度运算。该类通过定义的各种方法完成运算,基本运算如表10.5所示。

表10.5 BigInteger类中基本数学运算方法

下面的程序演示了如何使用BigInteger类完成基本数学运算,代码如下。

public classBasicMathOperation {

public static void main(String[] args) {

BigInteger number1 = newBigInteger("13"); //创建表示13的BigInteger对象

BigInteger number2 = newBigInteger("3"); //创建表示3的BigInteger对象

BigInteger add = number1.add(number2); //计算13 + 3的结果

BigInteger subtract =number1.subtract(number2); //计算13 - 3的结果

BigInteger multiply =number1.multiply(number2); //计算13 * 3的结果

BigInteger divide =number1.divide(number2); //计算13 / 3的结果

BigInteger remainder =number1.remainder(number2); //计算13 % 3的结果

BigInteger negate = number1.negate(); //计算13的相反数

System.out.println("number1 =" + number1);

System.out.println("number2 =" + number2);

System.out.println("number1 +number2 = " + add);

System.out.println("number1 -number2 = " + subtract);

System.out.println("number1 *number2 = " + multiply);

System.out.println("number1 /number2 = " + divide);

System.out.println("number1 %number2 = " + remainder);

System.out.println("-number1 =" + negate);

}

}

程序的运行效果如图10.3所示。

图10.3 使用BigInteger类完成基本运算

除了基本运算,该类还实现了一些增强运算,其方法说明如表10.6所示。

表10.6 BigInteger类中增强数学运算方法

下面的程序演示了如何使用BigInteger类完成增强数学运算,代码如下。

public classExpanededMathOperation {

public static void main(String[] args) {

BigInteger number1 = newBigInteger("-13");

BigInteger number2 = newBigInteger("3");

BigInteger abs = number1.abs(); //计算-13的绝对值

// 计算-13 / 3 的商和余数

BigInteger[] divideAndRemainder =number1.divideAndRemainder(number2);

BigInteger gcd = number1.gcd(number2); //计算-13和3的最大公约数

BigInteger max = number1.max(number2); //计算-13和3的最大值

BigInteger min = number1.min(number2); // 计算-13和3的最小值

BigInteger mod = number1.mod(number2); // 计算-13 mod 3的值

BigInteger modInverse =number1.modInverse(number2); //计算-13^-1 mod 3的值

// 计算(-13)^2mod 3的值

BigInteger modPow = number1.modPow(newBigInteger("2"), number2);

BigInteger pow = number1.pow(2); //计算(-13)^2的值

int signum = number1.signum(); //计算3的符号

System.out.println("number1 =" + number1);

System.out.println("number2 =" + number2);

System.out.println("|number1| =" + abs);

System.out.println("number1 /number2 = " + divideAndRemainder[0]);

System.out.println("number1 %number2 = " + divideAndRemainder[1]);

System.out.println("gcd(number1,number2) = " + gcd);

System.out.println("max(number1,number2)= " + max);

System.out.println("min(number1,number2) = " + min);

System.out.println("number1 modnumber2 = " + mod);

System.out.println("number1^-1 modnumber2 = " + modInverse);

System.out.println("number1^2 modenumber2 = " + modPow);

System.out.println("number1^2 =" + pow);

System.out.println("number1的符号:" + signum);

}

}

程序的运行效果如图10.4所示。

图10.4 使用BigInteger类完成增强运算

专家点评

编程过程中,使用BigInteger类的机会较少。常用的基本数据类型,如long和double已经能够满足大多数运算需求。使用BigInteger类不仅编写代码量会增加,而且性能也会降低。这里采用了以时间换精度的思想。

关于【C语言编程锦囊】,可能你还想知道:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180217B081ZR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券