我想问一些问题。例如,当我输入时,如何制作要求您显示的程序是a^b > e^c
(e是欧拉常数)?
Input : 7 1 3
Output : >
因为
7^1 is 7 and e^3 is 20.0855
因此7 < 20.085
我尝试了这段代码,但对于
a = 1000000, b = 1000000, c = 1000000
却不能接受,而1000000^1000000 (sign) e^1000000
int main(int argc, char const *argv[])
{
int testcase;
double a,b,c,e;
scanf("%d",&testcase); getchar();
for(int i = 1; i <= testcase; i++){
scanf("%lf %lf %lf",&a,&b,&c); getchar();
double normalSquare = 0;
double eSquare = 0;
normalSquare = pow(a,b);
eSquare = exp(c); // Ini e^x
printf("Normal Square : %lf\n",normalSquare);
printf("eSquare : %lf \n",eSquare);
if(normalSquare > eSquare){
printf("Case #%d: >\n", i);
} else {
printf("Case #%d: <\n",i);
}
}
return 0;
}
最佳答案
将公式重新排列为
b * log(a) > c * log(e)
并且
log(e)
为1(假设自然对数也是C标准库log
函数的基础),因此这进一步简化为b * log(a) > c
至少这样您就不会溢出
double
,这就是您正在发生的事情。作为数字程序员,“在日志空间中工作”是必须习惯的。关于c - 如何创建一个显示a ^ b小于或大于e ^ c的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59027511/