高精度运算

在开发中高精度运算使用并非非常频繁,float和double的精度实际上能够满足绝大多数需要,且高精度运算效率比常规的运算要慢一点,但使用高精度运算往往是为了使用其中便捷的API。官方提供的高精度运算的类主要两个

BigInteger:当数值范围超过long时使用

BigDecimal:几乎涵盖BigInteger功能,还可以保留小数点任意位数,理论上精度无穷大,以下主要说明此类  注:两者API很相似

加减乘除

BigDecimal aaa = new BigDecimal(20);

BigDecimal bbb = new BigDecimal(3);

BigDecimal aaa.add(bbb):加法运算,返回运算后结果

BigDecimal aaa.subtract(bbb):减法运算,返回运算后结果

BigDecimal aaa.multiply(bbb):乘法运算,返回运算后结果

BigDecimal aaa.divide(bbb):除法运算,返回运算后结果

保留小数点

主要针对除法运算,可能存在无限小数,若不进行舍入操作会报错

BigDecimal result = aaa.divide(bbb, 8, BigDecimal.ROUND_HALF_UP);

参数1:除数

参数2:保留的精度,要求保留几位小数

参数3:舍入模式,常用几种舍入方式

  BigDecimal.ROUND_HALF_UP:四舍五入

  BigDecimal.ROUND_CEILING:舍入上限值,比如结果为1.1,则会返回2

  BigDecimal.ROUND_FLOOR:舍入下限值,比如结果为1.8,则会返回1

其他API

* *Value():转换成基本数据类型,比如aaa.intValue(),aaa.doubleValue()等

BigInteger toBigInteger():转换成BigInteger类型

BigDecimal.ZERO:代表0

BigDecimal.ONE:代表1

BigDecimal.TEN:代表10

时间: 2025-01-14 16:12:37

高精度运算的相关文章

hdu4927 Series 1(组合+公式 Java大数高精度运算)

题目链接: Series 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 423    Accepted Submission(s): 146 Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-order series o

高精度运算1

1.高精度运算_加法 AYYZOJ p1443 COGS p37 1 type 2 arr=array[1..200]of integer; 3 var 4 a,b:arr;i,la,lb:integer; n:string; 5 procedure add(a,b:arr;la,lb:integer); 6 var i,x,lc:integer; c:arr; 7 begin 8 i:=1; x:=0; 9 while (i<=la) or(i<=lb) do 10 begin x:=a[i

高精度运算专题3-乘法运算(The multiplication operation)

这个专题呢,我就来讲讲高精度的乘法,下面是三个计算乘法的函数,第一个函数是char类型的,要对字符串进行数字转换,而第二个是两个int类型的数组,不用转换成数字,第三个则更为优化,用a数组-b数组放回数组a里面 函数1思路:要先把char类型的转换成int类型的数,直接每个数-‘0’就可以实现把char类型的转换成int类型的了. ①记录数组a.数组b的长度,放到第一位 ②每个位相乘,用一个数来记录进位(初值为0),每个位相乘,加上进位,存入c数组的相对应的位置,每次进位要重新赋值 ③最后记得要

大数高精度运算(模板)

前言:高精度运算.是指參与运算的数(加数.减数,因子--)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算. 模板:包含大数加减乘除.大数与int数的乘法,模板能够不断扩充. 代码: /* 所有亲測可用,可是不能用于负数的运算,仅仅能对正数进行大数运算 */ const int ten[4]= {1,10,100,1000}; const int maxl = 300; struct BigNumber { int d[maxl]; char s[maxl]; BigNumber(co

整数高精度运算——加法

高精度运算是信息学的一种重要算法.这种算法使用多个存储单位进行计算,因此它的计算范围超过一般使用一个存储单位的算法.也是一些信息学竞赛的常考题目. 高精度运算主要有以下几个步骤: 1.读取字符串,转换成数字倒序存储到整数数组中: 2.运算,注意进位和借位: 3.倒序输出整数数组,加法注意最高位进位,减法注意高位中的无用的0不要输出: 高精度加法代码: #include<stdio.h>#include<string.h>char s[1000];       //数组比较大时,应作

算法学习笔记(三)问题的转化与高精度运算

问题:设购票点没有任何的零钱,票价50美元,现有m人手持50美元,n人手持100美元,求这样m+n个人构成的队伍有多少种排队方法可以使得整个售票过程不中断. 分析:对于这个问题,经过简单的模拟可以发现,每个手持100的前面必须有一个手持50的,同样如果有k个手持100的连续出现,则前面至少连续k次50. 这样一来,可以设手持50元的为+1,手持100元的为-1,设ai为为第i个人所对应的值,则问题转化为数组的部分和a1+a2+...+ak≥0,其中k≤m+n,为了求这样的数列的个数,需要使用组合

一个开源的高精度运算库-GMP

https://gmplib.org/ 全称是GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库,官方网站是:http://gmplib.org/ 它的功能非常强大,接口很简单,文档详尽,有C风格的接口也有C++的精心封装后的接口,其中不但有普通的整数.实数.浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法,大素数生成,欧几里德算法,求域中元素的逆,Jacobi符号,le

7-10 高精度运算(20 分

7-10 高精度运算(20 分)提问 分别给出N和A的值(都是整数,1<=N<=150, 0<=A<=15).请给出级数∑?i=1?N??i?A?i??的答案. 输入格式: 有多组测试数据,每组测试数据占一行,该行包含2个整数N和A,以空格分隔. 输出格式: 对于输入每一行,在一行中输出相应于N和A的总和的整数值. 输入样例: 3 3 4 4 输出样例: 102 1252 import java.math.BigInteger; import java.util.Scanner;

[入门]高精度运算

(本人知识 while(1)cout<<"非常"; 有限,如果你看到我有任何错漏或者不足,真的真的真的恳请大家指出,蟹蟹,我希望大家可以一起进步~) int类型的变量只能存放-2^31~2^31-1范围的数据 long long类型的变量只能存放-2^63~2^63-1范围的数据 对于大数阶乘这种肯定是存不下,因此我们需要用数组存放数据: 下面是一个高精度运算的例子: 题目描述 用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤5