标题:【已解决】不调用math库函数求一个数的自然对数
取消只看楼主
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
结帖率:93.75%
已结贴  问题点数:10 回复次数:8 
【已解决】不调用math库函数求一个数的自然对数
刚发了一帖问求一个数开任意次根,其间写了个用幂级数展开求自然对数,但这个对x是有限制的,ln(1+x)中x是要在 -1到1之间的否则结果不正确,当x较大时怎么解决啊,有什么方法吗?
再说的明白点:  用幂级数展开只能算小数的ln,但是对大数取ln,只能靠查表,那么math库函数里面log是怎么实现的捏
-----------------------------------------------------------------------
我承认我钻牛角尖了,一直在想用级数展开做,其实当我写了第一个mln时我已经完成一大半了,再用下ln函数的性质就可以求出大数的ln,看代码:
程序代码:
#include<stdio.h>
#include<math.h>
#define LN10  (2.302585)

double nci(double k,int r) //求r个k相乘
{
  int i;
  double b=1;
  if (r==0)return 1;
  for (i=1;i<=r;i++) b=b*k;
  return b;
}

double mln(double a)
{
  int i,coo;double x,ans;
  int k=0;
  while (a>1)
    {
        a = a / 10.0;
        k++;
     }
  x=a-1;
  ans=k*LN10;coo=1;
  for (i=1;i<100;i++){
       ans += coo*nci(x,i)/i;coo=coo*(-1);}
  return ans;
}

double jiec(int i)
{
  int j; double ans=1;if (i==0) return 1;
  for (j=2;j<=i;j++)
      ans *=j;
  return ans;
}

double mexp(double ab)
{
  int i;double ans=0;
  for (i=0;i<100;i++)
      ans += nci(ab,i)/(jiec(i)*1.0);
  return ans;
}

main()
{
  double a,b;
  printf("enter a,b : ");
  scanf("%lf %lf",&a,&b);

  printf("手写mln a结果 is %lf\n",mln(a));
  printf("调用math库log a 结果is %lf\n",log(a));

  printf("手写求a的b次的结果answer is %lf\n",mexp(b*mln(a)));
  printf("调用math库求a的b次的结果pow answer is %lf \n",pow(a,b));

  getch();
}


[ 本帖最后由 zjsxwc 于 2011-2-18 10:26 编辑 ]
搜索更多相关主题的帖子: 幂级数 color 自然 
2011-01-20 13:48
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
查了下资料,我们笔算自然对数是靠查自然对数表的,而自然对数表是这么推的


我想知道的是难道math。h里有自然对数表?就算有那得存储多大空间啊

[ 本帖最后由 zjsxwc 于 2011-1-20 15:10 编辑 ]

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 14:57
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
没人知道吗?

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 19:29
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
回复 5楼 点线面
那你总要先把怎么算 ln(461513516545616546545646541) 的方法先弄懂吧,然后再用高精度,说吧怎么算啊,这么大的数调用log函数肯定是不行的

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 19:44
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
问题是我不知道怎么算ln函数

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 19:55
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
用幂级数展开只能算小数的ln,但是对大数取ln,只能靠查表,那么math库函数里面log是怎么实现的捏" border="0" />

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 20:05
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
回复 10楼 点线面
我本来就是问怎么算ln,是你一个劲地在说高精度

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 20:19
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
回复 13楼 点线面
不是都说了幂级数展开有范围限制的,当x大于1以后就不正确了

[ 本帖最后由 zjsxwc 于 2011-1-20 20:41 编辑 ]

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-20 20:35
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
得分:0 
顶上来,不能沉了

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-01-21 12:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-331356-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.414497 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved