⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pow_user.cpp

📁 这是C++语言中pow函数的源代码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>

#include <stdio.h>
#include <fstream.h>
#include <iostream.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

double pow_i(double num,int n)   //计算num的n次幂,其中n为整数
{
   double powint;
   powint = 1;
   for(int i=1; i<=n; i++) powint*=num;
   return powint;
}

double pow_f(double num, double m)   // 计算num的m次幂,num和m可为双精度,num大于零
{
    int i, j;
	double powf, x, tmpm;
	powf = 0;
	tmpm = 1;
	x = num - 1;
	for(i=1; tmpm>1e-12 || tmpm<-1e-12; i++)   //当tmpm不在次范围时,停止循环,范围可改
    {
		  for(j=1,tmpm=1; j<=i; j++)
		  {
			  tmpm*=(m-j+1)*x/j;
		  }
		  powf+=tmpm;
    }
	return  powf+1;
}

double pow_user(double num, double m)  // 调用pow_f()和pow_i(),计算num的m次幂,是计算幂的入口
{
	if(num==0 && m!=0)
	{
		return 0;  //若num为0,则返回0
	}
	else
	{
		 if(num==0 && m==0)
		 {
			return 1;  // 若num和m都为0,则返回1
		 }
		 else
		 {
			if(num<0 && m-int(m)!=0) return 0;  //若num为负,且m不为整数数,则出错,返回0
		 }
	}
	if(num>2)     // 把底数大于2的情况转为(1/num)^-m计算
	{
		num = 1.0/num;
		m = -m;
	}
	if(m<0) return 1.0/pow_user(num, -m);      // 把指数小于0的情况转为1/num^-m计算
	/*
		当指数为浮点数是,分成整数和小数分别求幂,这是因为但底数较小式,
		用pow_f直接求幂误差大,所以分为指数的整数部分
		用pow_i小数部分用pow_f求.
	*/
	if(m-int(m)==0)
	{
		return pow_i(num, m);
	}
	else
	{
		return pow_f(num, m-int(m))*pow_i(num, int(m));
	}
	return pow_f(num, m);
}

int main(int argc, char* argv[])
{
	double num, m, ans;
	num = 9.1;
	m = -0.56;
	ans = pow_user(num, m);
	cout<<"answer = "<<ans<<endl;
	puts("Press any key to continue...");
	getchar();
	return 0;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -