首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

exp函数source code解决思路

2012-03-31 
exp函数source code请问哪位有exp函数的实现的代码,小弟在此谢了!注意,exp(floatx),起参数是实数哟![解决

exp函数source code
请问哪位有exp函数的实现的代码,小弟在此谢了!
注意,exp(float   x),起参数是实数哟!

[解决办法]
可以用泰勒展开式
exp(x)=1+x/1!+x^2/2!+x^3/3!+...
不过实际上,计算机已经提供计算exp的指令了,所以现在大部分机器中都不需要。
[解决办法]
这样的精度够了吧 ....

#include <stdio.h>
#include <math.h>

#define LOG10(2.3025850929940459)
#define MAXEE(340)
double foo( double x )
{
static const unsigned longfltINF = 0x7f800000;
double e , r = 1 , v;
int i ;

x = LOG10 * modf( x / LOG10 , &e );
if( e < -MAXEE )
return 0;
else if ( e > MAXEE )
return *(float*)&fltINF;/* overflow. */
for( i = 1 , v = x ; v ; r += v /= i++ , v *= x )
;
v = 1 ; if( e > 0 )
{
while( e > = 66 )v*=1e66 , e-=66;
while( e > = 8 )v*=1e8 , e-=8 ;
while( e-- )v*=10 ;
}
else if( e < 0 )
{
while( e <= -66 )v*=1e-66 , e+=66;
while( e <= -8 )v*=1e-8 , e+=8 ;
while( e++ )v*=1e-1;
}

return r * v;
}

int main()
{
int i ;
double r1 , r2 , rd ;

//_control87( _PC_24 , _MCW_PC );
//_control87( _PC_53 , _MCW_PC );
//_control87( _PC_64 , _MCW_PC );

for( i = -1000; i <= 1000; ++i )
{
r1 = exp( i ) , r2 = foo( i ) , rd = r1 - r2;
if( rd/r1 > = 1e-12 )
printf( "%d .... %.8g %.8g %.8g %.8g\n " , i , r1 , r2 , rd , rd / r1 );
}

return 0;
}

热点排行