自学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
做乘法运算,当然先忽略小数点

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

被折叠的 条评论
为什么被折叠?



