TC官方合作论坛

标题: 请教高手:开n次方的算法 [打印本页]

作者: 贪吃蛇    时间: 2014-2-17 16:58
标题: 请教高手:开n次方的算法
我只知道笔算的开n次方算法,但计算时数位太多(超出双精度的表示范围),程序处理非常不便,请高手指点。

作者: 小西    时间: 2014-2-17 17:18
遍历 + 开方 能否实现?
作者: 贪吃蛇    时间: 2014-2-17 19:21
小西 发表于 2014-2-17 17:18
遍历 + 开方 能否实现?

你说的开方是指TC自带的开方功能吗?
那个怎么算开高次方的值?例如123456开31次方的值?
作者: 小西    时间: 2014-2-17 22:36
标题: 网上
本帖最后由 小西 于 2014-2-17 23:31 编辑
贪吃蛇 发表于 2014-2-17 19:21
你说的开方是指TC自带的开方功能吗?
那个怎么算开高次方的值?例如123456开31次方的值? ...

开始想得太简单,
16 的4次方根是 2,可以用16 两次开方得到.
81的4次方根是3,也可以是81两次开方得到.
后来发现,这些只是特例.

网上找了一下资料,有关于这方面的计算,整理了一下.



  1.     被开方数=123456
  2.     根指数=31

  3.     计算结果=1,N次方根=0   
  4.     循环(计算结果!=N次方根)        
  5.         N次方根=计算结果,t=1        
  6.         遍历(i=0;i<根指数-1;i++)
  7.             t=t*N次方根
  8.         遍历结束               
  9.         计算结果=字符串.左侧(N次方根+(被开方数/t-N次方根)/根指数,16)
  10.         辅助.等待(1)
  11.     循环结束

  12.     调试输出(N次方根)


复制代码


作者: 小西    时间: 2014-2-17 23:39

  1. 功能 求N次方根(被开方数,根指数)
  2. 计算结果=1,N次方根=0   
  3. 循环(计算结果!=N次方根)        
  4.     N次方根=计算结果,t=1        
  5.     遍历(i=0;i<根指数-1;i++)
  6.         t=t*N次方根
  7.     遍历结束               
  8.     计算结果=字符串.左侧(N次方根+(被开方数/t-N次方根)/根指数,16)
  9. 循环结束
  10. 返回 N次方根
  11. 功能结束
复制代码

作者: 贪吃蛇    时间: 2014-2-18 13:14
小西 发表于 2014-2-17 23:39

谢谢小西,原只想要算法的,没想到小西把完整代码都发出来了,而且非常简洁、速度也快,赞!
刚试了一下,参数的取值范围是:被开方数不为0、根指数不小于1。
作者: 贪吃蛇    时间: 2014-2-19 21:37
小西 发表于 2014-2-17 23:39

这个算法虽然简洁,但使用中发现不足:
1,根指数为小数时精度不高:例如6.25开2.5次方计算结果为1.84201574932019,(系统自动计算器的计算结果是2.081383),正确值应该是2;
2,有时会卡住(因为计算耗时吧):例如计算5.25开2.5次方。

是否还有其它更优的算法,请指点。
作者: 小西    时间: 2014-2-19 22:10
贪吃蛇 发表于 2014-2-19 21:37
这个算法虽然简洁,但使用中发现不足:
1,根指数为小数时精度不高:例如6.25开2.5次方计算结果为1.84201 ...

这个的原理是根据 网上找的公式
X(n+1)=Xn+(A/Xn^(k-1)-Xn)1/K
得来的,
具体分析见百度百科.
http://baike.baidu.com/link?url= ... LLLzApWSoHg9NoJNpsu
小数位,没有深究.
作者: 贪吃蛇    时间: 2014-2-19 22:55
小西 发表于 2014-2-19 22:10
这个的原理是根据 网上找的公式
X(n+1)=Xn+(A/Xn^(k-1)-Xn)1/K
得来的,

百度到精度高的算法,但效率太低,不实用。期待好的算法……





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1