怎样用C语言实现精确计算浮点数的幂

比如求95.123^12的精确值;;;;
各位大神不吝赐教!!!!!!!!!
下面两个回答都没有考虑到时精确计算,,,应该考虑的是数比较大,已经溢出了,,但要精确的表示出来
,。。。。把自己说纠结了~~~~~~
告诉大家,,精确答案是548815620517731830194541.899025343415715973535967221869852721

第1个回答  2010-07-21
帮助1楼补充一点
可以随意输入两个数,比如你说的95.123 与12
#include<stdio.h>
#include<math.h>
void mian()
{
double power,f;
float x;
int y;
scanf("%f,%d",&x,&y);
power=pow(x,y);
f=power;
printf("f(x,y)=%.3f",pow(x,y));
}
结果是548815696580962014000000.000

噢,我补充一下,系统默认的是小数点后6位的吧
想要得出小数点超过6位的时候,是无法控制的
6位之内才可以控制
超过6位...可能我学艺未精,无法参透 。
第2个回答  2010-07-20
用系统内置的函数
#include<stdio.h>
#include<math.h>
void mian()
{
double power,f;
power=pow(x,y);
f=power;
printf("f(x,y)=%f",pow(x,y));
}
double pow (double x ,double y) 这个是系统内置的函数
第3个回答  2020-02-19
你做的北大ACM网站上的试题吧?
#include<stdio.h>
#include<math.h>
int
qq(int
n)
{
int
i,
sum=1;
for(i=1;i<=n;i++)
sum=10*sum;
return(sum);
}
int
main()
{
float
r;
int
n;
while(1)
{
char
a[10000];
long
int
b[10000];
int
k,h,m,i,j,z,g,t,q,e;
long
int
c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='.')k=i;
m=i-k-1;
for(i=k;i<k+m;i++)
a[i]=a[i+1];
h=i;
for(i=0;i<h;i++)
b[i]=a[i]-48;
for(i=0;i<h;i++)c=c*10+b[i];
for(i=0;i<h/2;i++){
t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}
for(e=1;e<n;e++)
{
for(i=0;i<h;i++)b[i]=b[i]*c;
for(j=0;j<h-1;j++)
if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10;
}
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}
h=h+g-1;
}
}
if(h<m*n)
{
printf(".");
for(j=m*n-1;j>h-1;j--)printf("0");
for(j=0;
;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h==m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
printf(".");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
if(j<m*n-1&&b[h-1]==0)
{
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j<=m*n-1&&b[h-1]!=0)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=m*n)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
}
}
printf("\
");
}
return
0;
}
第4个回答  2019-09-30
你做的北大ACM网站上的试题吧?
#include<stdio.h>
#include<math.h>
int
qq(int
n)
{
int
i,
sum=1;
for(i=1;i<=n;i++)
sum=10*sum;
return(sum);
}
int
main()
{
float
r;
int
n;
while(1)
{
char
a[10000];
long
int
b[10000];
int
k,h,m,i,j,z,g,t,q,e;
long
int
c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='.')k=i;
m=i-k-1;
for(i=k;i<k+m;i++)
a[i]=a[i+1];
h=i;
for(i=0;i<h;i++)
b[i]=a[i]-48;
for(i=0;i<h;i++)c=c*10+b[i];
for(i=0;i<h/2;i++){
t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}
for(e=1;e<n;e++)
{
for(i=0;i<h;i++)b[i]=b[i]*c;
for(j=0;j<h-1;j++)
if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10;
}
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}
h=h+g-1;
}
}
if(h<m*n)
{
printf(".");
for(j=m*n-1;j>h-1;j--)printf("0");
for(j=0;
;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h==m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
printf(".");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
if(j<m*n-1&&b[h-1]==0)
{
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j<=m*n-1&&b[h-1]!=0)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=m*n)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
}
}
printf("\n");
}
return
0;
}
第5个回答  2020-01-25
你做的北大ACM网站上的试题吧?
#include<stdio.h>
#include<math.h>
int
qq(int
n)
{
int
i,
sum=1;
for(i=1;i<=n;i++)
sum=10*sum;
return(sum);
}
int
main()
{
float
r;
int
n;
while(1)
{
char
a[10000];
long
int
b[10000];
int
k,h,m,i,j,z,g,t,q,e;
long
int
c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='.')k=i;
m=i-k-1;
for(i=k;i<k+m;i++)
a[i]=a[i+1];
h=i;
for(i=0;i<h;i++)
b[i]=a[i]-48;
for(i=0;i<h;i++)c=c*10+b[i];
for(i=0;i<h/2;i++){
t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}
for(e=1;e<n;e++)
{
for(i=0;i<h;i++)b[i]=b[i]*c;
for(j=0;j<h-1;j++)
if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10;
}
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}
h=h+g-1;
}
}
if(h<m*n)
{
printf(".");
for(j=m*n-1;j>h-1;j--)printf("0");
for(j=0;
;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h==m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
printf(".");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>m*n)
{
for(j=0;
;j++)if(b[j]!=0)break;
if(j<m*n-1&&b[h-1]==0)
{
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j<=m*n-1&&b[h-1]!=0)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
printf(".");
for(i=m*n-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=m*n)
{
for(i=h-1;i>=m*n;i--)
printf("%d",b[i]);
}
}
printf("\n");
}
return
0;
}
相似回答