- 注册时间
- 2016-2-29
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 729
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
我用VB完整的实现了估商法,支持正负,小数,科学计数法,之所以说完整实现,是因为这个程序是我正在写的(高精度表达式计算机)的子程序,能够和其它计算程序配合,实现高精度加减乘除,阶乘,乘方,开N次方,函数等混合运算.
例:能够运行万位精度,开10000次方根正确运算,开N次方根是用的迭代法,为什么举这个例子,因为参入运算的子程序如果有问题,是计算不出正确结果的,现在这个计算机还没完善:
先说优点,国内目前找到的表达式计算机(不支持高精度),而且不完善,几乎无纠错功能,最关键是不支持函数,函数是一切功能运算的基础,这些问题在我的程序里已经建立了解决框架.可以迅速加入纠错功能,各种函数.
再说缺点,开N次方没找到好的算法,我的算法是通过利用手算公式取初值,再迭代, 三角函数是用的泰勒公式,速度也是超慢,阶乘针对硬乘优化,10000!3秒左右,准备调用别人的大数库,
乘法是硬乘和FFT乘法分工,具体如何分工没有好的方法,目前采用的是1100位*1100位以内的数用硬乘,和任一单数400位之内用硬乘,
乘方采用网上找到的快速算法,不知道名字,就是A的8次方转换成A的平方的平方,然后再平方,速度非常快.很满意.
说了这么多主要是希望坛主和其他大大们能给出好的算法和建议,
另外我再谈谈我对除法的一些看法,不能利用计算硬件的算法不是好算法,所以设计算法时要充分考虑硬件的效能,简单说一下我知道的算法,第一,用减法实现,从高位向低位减,我最早用的是这个方法并实现, 第二个方法是用的估商(不是试商,试商非常慢),估出一个不大于正确商的数,做乘法,再按减法算法继续,一直觉得这个算法不错,在位数少时,速度还满意,
第三个方法是一个论文上说的方法,用的是十进制,,提前算出除数和1-9相乘的得数,其它步骤和方法二差不多,低位时速度比第二个方法稍慢,高位时甩开了我,另外这个论文中说到了迭代法,说很慢,
第四个方法是迭代法,我实现后就没管它了,和上面说的一致,超慢!
第五个方法就是我现在用的方法,为什么我一直没实现第三种方法,就是因为它采用的是十进制,不能充分利用CPU的乘法功能,需要说明的一点是现在乘法指令和加法一样快,你不相信?,自已写个代码去试试,所以不要再想一些用加减代乘法,或除法的算法,整数除法指令也只比乘法慢一点,所以为了提高性能,32位机上要用万进制乘,用万进制的难点就是商更加难估了,解决要点就是通过找一个参数使除数接近10000,当然通用除法的调试是相当麻烦的,所以上网上你只能看到人讲原理,却看不到实现,其实我们论坛看到一个人用C写估商法,因为他的程序运行困难,我没有调试,不过他在采用万进制的情况下,第一位除数采用五位数估商,应该有问题,我曾经有过类似的经历,不过没有成功,也可能他是对的,必竟我没调试过他的程序.
希望坛友们给予指导,建议!
补充内容 (2016-3-24 14:36):
下面有我回别人的贴子,在里面有对估商法较详细的看法,有不同意见,看法发出来一起计论! |
评分
-
查看全部评分
|