大整数类型和一般的整数类型相比各有什么优劣?
一、大整数类型和一般的整数类型相比
大整数类型和一般的整数类型相比优点是不会溢出,能表示任意长度的数字做各种精度的运算。
缺点是没有直接的类型运算支持,必须像人类计算一样按位数分别计算进行借位/进位操作。。好在现在常用语言比如Java已经内置大数库,不用重复造轮子了。硬件:不直接支持运算,效率低下。现在的主流计算机通常都是以寄存器为单位进行运算,在这种架构上实现大数运算一般都要从内存读取后操作,如果存在大量随机读写大数的情况,性能甚至可能下降几十到上百倍。
普通整数:优缺点刚好和大整数反过来,简单快,但是会存在溢出和精度丢失问题。
为什么不做自动类型提升?因为很难做啊。首先要知道溢出是一个运行时才能完全确定的问题,那么:对于类型确定的语言根本做不到,因为类型在编译期间已经确定,除非重新设计一个功能更强大的编译器。对于无类型的语言,也许可以通过把所有数都存在内存并且设置长度与类型标志位的方法来达到类似的效果,但是这样程序效率一定会大大降低,并且解释器会变得更复杂,同时会引入一套新的数据解析规则,很多库也许都需要重写。
既然要做无限制的提升,那么数据就不能放在寄存器中,同时还必须设计一套能够在自动提升/降低时能够自动申请/释放内存的方案,同时还必须兼顾性能……
综上所述,具备设计开发强于GCC/LLVM等静态编译器,开发高效解释语言库,能完美解决Java的GC问题的人,才能解决这个问题。
延伸阅读:
二、大整数BigInteger
import java.math.BigInteger;
首先,对于初始化则不像基本类型包装这块讲着3种方式,这里只剩下valueOf() 可以对其初始化。
接着,大整数变量不能使用算术运算符,需要通过以下方法进行运算:
add():取代了加法运算符“+”;
subtract():取代了减法运算符“-”;
multiply():取代了乘法运算符“*”;
divide():取代了除法运算符“/”;
remainder():取代了取余运算符“%”;
negate():取代了负号运算符“-”。
相关推荐HOT
更多>>内网与外网有哪些区别?
一、内网与外网的区别1、IP地址设置不同一般内网有自己的IP号段,也不会和互联网号段冲突,内网就是从路由器以下开始的,而且IP都是以192开头的...详情>>
2023-10-14 23:33:06研发管理的目标是什么?
一、研发管理的目标研发管理的目标是是提高效能,效能应该分为两个方面,一个是提升质量,一个是提升效率。提升质量是肉眼可见的,但是提升效率...详情>>
2023-10-14 22:12:13需求管理主要涉及哪些内容和方法?
一、需求管理主要涉及内容和方法1. 在时间上重新规划企业的供应流程,以充分满足客户的需要推迟制造是供应链管理中实现客户化的重要形式,其核...详情>>
2023-10-14 20:14:34大整数类型和一般的整数类型相比各有什么优劣?
一、大整数类型和一般的整数类型相比大整数类型和一般的整数类型相比优点是不会溢出,能表示任意长度的数字做各种精度的运算。缺点是没有直接的...详情>>
2023-10-14 16:13:56