请教: log, ln, 开根号,的算法

yifenggd 2003-12-10 03:59:20
请教: log, ln, 开根号,的算法, 急需! 谢谢
...全文
3213 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangbch 2004-03-15
  • 打赏
  • 举报
回复
求常数的对数,参见http://numbers.computation.free.fr/Constants/constants.html
liangbch 2004-03-15
  • 打赏
  • 举报
回复
1.通过特殊的方法事先计算出一些小质数的对数,如集合a=
{2,3,5,7,11,13}

2.找出一组分数,形成数组A,使这些分数依次递增并且大致呈等比数列分布,并且这些分数的分子和分母的所有质因数均来自集合a,可直接求值,且任意两个数的比小于d1,d1略大于1:
如 1,1.1, 1.2,1,1.3,1.4,1.5,1.6,1.8,2,2.1,2.2,2.4,2.6,3.0,3.2...9.6,9.8,10

3。如果求x的对数,可首先将其化为 x1*10^f1的形式,则lg(x)=lg(x1)+f1.

4. 在数组A中,找一个数a[i],使a[i]<x1,a[i+1]>x1,另f2=A[i],x1=x2*f2,则lg(x)=lg(x1)+f1= f1+ lg(f2)+ lg(x2),这里x2 一定小于d1,换言之,x2是一个略大于1的数,可以利用泰勒公式求值,且速度很快。

5。如果想得到更高的精度,在利用泰勒公式求x2时,需要计算的项仍然很多,这时可以再建立一个数组B[1..n],使B[n]略大于d1,对于每一个i,B[i+1]/B[i]<d2,d2是一个比d1 更接近1的数,这样 x2= f3 * x3 ,f3为数组B中的某一个元素,lg(x)=f1+lg(f2)+lg(f3)+lg(x3),由于1<x3<d2<d1,故在利用泰勒公式求lg(x3)时,计算的项数将更少。

6。按此思路,为了减少计算量,可以继续做一个数组C,依次类推。但是数组不可以不断增加,一方面增加了存储空间,另一方面,在构建数组A[1..n]时,A[1]>1,A[n]小于d,d越小,满足条件(数组各个元素可以用分数表示,分数分子分母的所有质因数均为小质数,且分子分母不不能超过计算机中整数的表示范围)的数组元素越少。
7。在查表时,可以使用2分查找算法,如果想进一步提高速度,可以建立一个查找表,相当于索引,由一个数 确定索引的位置可以使用公式法,由索引值在数组中查找时,可使用顺序或者2分查找算法。

利用这个算法可以将某一个数的对数计算到很高精度,且速度很快,这是我在编写超级计算器时,经过长时间的研究而得到的一个算法,这是首次公开,如有人利用我的算法,希望注明出处。

计算一些整数的对数的算法,许多地方均有介绍,请感兴趣者查找。
ybei 2004-03-11
  • 打赏
  • 举报
回复
泰勒展开
szAlanLiao 2004-02-21
  • 打赏
  • 举报
回复
c++提供的log10()函数运算太慢了。我想了一个办法:
lg(x)=lg(a.bcd*10^n)=lg(a.bcd)+lg(10^n)=lg(a.bcd)+n;
然后做了一张[1.000~9.999]的lg(x)表。

这样比ln(x)=2(t+t^3/3+t^5/5+...)这种方法就当会快,
不过要浪费70k左右的空间。

有没有更好的??
solomon1 2003-12-24
  • 打赏
  • 举报
回复
我觉得可以用级数展开,应该行吧,ok?
liangbch 2003-12-24
  • 打赏
  • 举报
回复
在我的《软件超级计算器》(http://www.csdn.net/cnshare/soft/3/3229.shtm)实现了三角/反三角,指数/对数(ln,log10)的算法,可以将任意一个数的函数计算到14-300位,该程序完成于2000.10月。现在我有了更好的算法,但是也很复杂,等我有时间,给你 提供一些计算的方法和思路。
liangbch 2003-12-24
  • 打赏
  • 举报
回复
在计算(ln(x)),时,当 x和1的差很大时,迭代非常慢,直接使用泰勒公式不可取,需要做一些预处理,才可以使用泰勒公式,例如:
ln(x)=ln(x0 * x1)=ln(x0)+ln(x1),x0:可以通过某种方法求的,x1非常接近于1,这样就可以求得ln(x),此题的关键如何选取x0,使得x0的对数很容易求得,而且x0非常接近于x.
这里提供一个链接(求一些常数的对数,平方根等)http://numbers.computation.free.fr/Constants/constants.html
gnefuil 2003-12-23
  • 打赏
  • 举报
回复
都可以泰勒展开的,根据需要的精度,展开到某一项,然后带入具体的x计算就可以了
saint001 2003-12-23
  • 打赏
  • 举报
回复
420*x+630*x^2+260*x^3+25*x^4
ln(1+x)=---------------------------------
420+840*x+540*x^2+120*x^3+6*x^4
|x|在0附近时精确,精度非常高,比如求log(2)
ChoboZelluX 2003-12-23
  • 打赏
  • 举报
回复
求平方根的算法

http://www.csdn.net/Develop/Read_Article.asp?Id=18830
zalyer 2003-12-14
  • 打赏
  • 举报
回复
学习一下。
ZhangYv 2003-12-11
  • 打赏
  • 举报
回复
mathe...大牛现形!
kbsoft 2003-12-11
  • 打赏
  • 举报
回复
mathe大大N久不见了,想念中...
mathe 2003-12-11
  • 打赏
  • 举报
回复
开根号用牛顿迭代法最方便
x(k+1)=(x(k)+a/x(k))/2
log同ln的区别就是差一个ln(10),
对于ln(x)
如果x非常大或者非常小,可以先通过乘以或除以e的若干次方来解决。
如果是在计算机里,还有个技巧,通过其二进制 表示,我们可以知道
2^k<=x<2^(k+1),

我们只要先计算ln(x/2^k/sqrt(2))最后加上(k+1/2)*ln(2)就可以了
所以我们只要对1/2<=x<3/2计算ln(x)
最快的方法是计算
x=(1+t)/(1-t)

t=(x-1)/(x+1)
所以|t|<1/3.
然后
ln(x)=2(t+t^3/3+t^5/5+...)
pheavecn 2003-12-11
  • 打赏
  • 举报
回复
我知道单片机中汇编开方的算法。
用的是一位一位试的方法。
amdcwf 2003-12-11
  • 打赏
  • 举报
回复
看看,高数第二册里的多项式展开那一章,相信是很有帮助的
pheavecn 2003-12-11
  • 打赏
  • 举报
回复
TO:mathe
看来您是数值计算的高手。
单片机没有乘除法,运算速度也慢,ram小。
计算器里是用模仿手算的方法。
我多写单片机的程序,以前有个单是写计算器,我知识缺乏,没敢接。
所以现在对这些算法特留意。
HUNTON 2003-12-10
  • 打赏
  • 举报
回复
很多介绍牛顿迭代的书都把开平方的作为牛顿迭代法的例子来讲解
saint001 2003-12-10
  • 打赏
  • 举报
回复
错了一点
x(k+1)=x(k)-1+a/e^x(k)
saint001 2003-12-10
  • 打赏
  • 举报
回复
求解f(x)=0的牛顿迭代法
x(k+1)=x(k)-f(x(k))/f'(x(k))

特别的,对于f(x)=x*x-a,即开方
x(k+1)=(x(k)+a/x(k))/2

对于f(x)=e^x-a,对数
x(k+1)=x(k)-1+a/e^x
加载更多回复(1)
项目详细功能参考项目演示内容即可项目优势:1、项目从零开始到完结 附带视频,源码以及相关辅助资料,适合学习使用,项目也可拿来即用。2、几乎全手写代码,功能流程详细 跟着可以独立完成,附带详细代码相关常见bug 和 调试解决方案,让大家学会跟踪快速解决问题。3、系统后端使用LayUI技术,对页面不精通的小伙伴也可以快速完成精美页面的设计及应用,支持统一后台管理,也可拿来做其他项目通用后台4、针对layui 相关技术点薄弱的学员提供相关技术点学习,让快速上手完成项目研发5、选材来自生活,项目真实感强,可用学习使用和就业面试使用,适合作为面试中提高实际项目经验...6、该项目前后端分离,满足前沿技术点..项目技术栈:- 数据库:MySQL8.0- 后端技术:SpringBoot,MyBatisPlus,JWT 等- 日志技术:Log4j- 数据库连接池:druid- 前端技术:LayUI, axios,Echarts,Ztree 等- Web容器:Apache Tomcat 9- 项目管理工具:Maven3.6- 思维导图设计工具:XMIND 8- 开发工具: IDEA2020, WebStorm2020- 数据库设计软件:Power Designer16.5特别提示:1、涉及相关技术点学习,更多侧重大学生或无项目经验以及项目经验较少的学员入门到项目完结项目实战2、项目中功能处理大多提供多种解决方式,如跨域访问,更多让大家了解解决方式的同时学会技术点应用3、加入bug的调试以及代码跟踪处理,更好的让学员更多学会如何解决问题

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧