C++高精度实数类实现[0]

本文介绍了作者自学C++时尝试编写高精度实数类d_BigDecimal的过程。作者选择以2进制存储数据,以提高运算效率,并讨论了数据存储、小数点位置表示以及选用bool类型作为存储单元的原因。文章提出了构造函数将10进制字符串转换为内部2进制表示的待解决问题。

自学C++也有近一个月了,中途研究了一段时间MFC,感觉挺难得。想了想还是先把基础学好,不要好高骛远吧~吐舌头

于是乎俺决定自己写一个C++的高精度实数类,乍一想貌似比较容易咔咔大笑

以前在Java里用过 BigInteger 和 BigDecimal 这样的基于字符串实现的大整数、高精度小数的类。我希望自己能编写一个类似实现的C++类。

由于整数也是小数的一种,我就偷个懒,直接写高精度实数类好啦奋斗


类名就叫 d_BigDecimal 了,看似有点不伦不类哈~这个d就是俺名字的首字母咯偷笑

我设想的这个类对外提供一个构造函数,接收一个C风格字符串(const char*)来构造指定实数。之所以不使用C++提供的string类,算是个人的小脾气吧(不用你们的类库俺也能做得好~鄙视


下面是很重要的一步了,内部数据如何存储?这直接关系到运行时的效率。由于该类是很基础的一个类,我想尽可能的让运算效率提高~此处得动动脑子了疑问

可惜的是,我一没学过数据结构,二没学过算法分析,只能凭空乱想啦~~~

以下内容纯属个人浅见,不对勿喷哦尴尬


很显然,如果在内部存储时不做任何处理,直接利用构造函数中传递进来的字符数组,然后以10进制的加减乘除做运算,效率是极其低下的,其中涉及到进位尤其麻烦。我第一个排除了这种想法。

用2进制存储或许是个好主意。首先,2进制数的加法虽然也有进位,但是情况简单,便于处理,这对降低编写代码的复杂度有所帮助。当然,更重要的一个理由是,我认为2进制的乘除运算比10进制在运行效率上要高得多。


举一个例子:

10进制中

19.625  和 23.375

这两个数的2进制形式分别是

10011.101 和 10111.011

做乘法运算,当然先忽略小数点

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值