加载中…
个人资料
李恒星_释永思
李恒星_释永思
  • 博客等级:
  • 博客积分:0
  • 博客访问:30,953
  • 关注人气:67
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

关于求解a^b当b为无理数的算法

(2016-11-14 14:22:53)
关于求解a^b当b为无理数的算法。
本来,delphi中有个power函数的,我先不看源码,而自思其算法。
首先,a^n,当n为自然数时,易知算法,连乘即可。
再次,a^(1/m),当m为自然数时,可以用二分法之近似法求解。
然后,a^(n/m),可能分解为先a^(1/m),再n指数幂即可。
再然后,a^b,当b为无理数,可以用趋近法于一系列有理数,有理数用分数表示,这样趋近法。
这是我自思的算法,与delphi的power函数源码对比,发现了不同了。
function Power(const Base, Exponent: Extended): Extended;
begin
  if Exponent = 0.0 then
    Result := 1.0               { n**0 = 1 }
  else if (Base = 0.0) and (Exponent > 0.0) then
    Result := 0.0               { 0**n = 0, n > 0 }
  else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
    Result := IntPower(Base, Integer(Trunc(Exponent)))
  else
    Result := Exp(Exponent * Ln(Base))
end;

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有