コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

logとpowの計算

10のn乗をexp関数を作って自前で書いている話を書きましたが、ついでに、logとxのy乗についても書きたいと思います。昨日のブログで下記の話をしました。

Z=pow(10,n)は、
log(Z)=log( pow(10,n) )
log(Z)=n*log(10) となり、
ここで、
Y=log(X)は、X=exp(Y)なので
Z=exp(n*log(10)) である。

すなわち、10のところがxになったとすると、log(x)が解ければ、xのy乗が計算できます。
logをテイラー展開して求めるプログラムを書きに示します。

//**********************************************
// log( x )計算のサブルーチン
//**********************************************
double	sublog( double z )
{
double	y;
double	b, k;
int	n;

	if( z==2.0 ){	return( 0.6931471805599449 );	}
	y = ( z - 1 );
	b = y;
	n = 2;
	while( true ){
		b = b * ( z - 1 );
		k = b / (double)n;
		if( -0.0000001<k && k<0.0000001 )	break;
		if( (n % 2)==0 ){
			y = y - k;
		}
		else{
			y = y + k;
		}
		n++;
	}
	return( y );
}
//**********************************************
// log( x )を計算する
//**********************************************
double	tlog( double x )
{
double	y = 0.0;
double	d, e, c;

	if( x==2 ){
		return( 0.6931471805599449 );
	}
	else if( x<2 ){
		y = sublog( x );
	}
	else{
		c = 1.0;
		d = 1.0;
		while( true ){
			d *= 2.0;
			e = x / d;
			if( e<=2.0 )	break;
			c++;
		}
		y = c * 0.6931471805599449 + sublog( e );
	}
	return( y );
}

これで、
Z = pow(x,y)の計算が、
Z = exp( y*log(x) ) として解くことができるようになりました。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム