我理解如何pow()正确使用我只是想知道为什么当我运行这个代码ans= inf.
我很难理解这一点.
这是否与chars有关,只能采用-128到+127的值并pow()计算方式?
这与" %c"我的第一个scanf参数中的空间有什么关系吗?
Linux 4.9.0-7-amd64 debian 4.9.110-1 gcc版本6.3.020170516
#include <stdio.h>
#include <math.h>
int main ()
{
char base, exp;
float ans;
printf("Enter base number : ");
scanf(" %c", &base);
printf("Enter exp number : ");
scanf(" %c", &exp);
ans = pow(base,exp);
printf("%c raised to the %c power equals %f", base, exp, ans);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当您输入base并exp使用时,%c您将获得字符 '0' - '9'而不是整数值.因此,如果输入0和0,您获得的值(假设ASCII编码)实际上将为48,因为这是ASCII代码'0'.48 48的结果大约是5 x 10 80.
然后,将结果值保存在a中float.假设a float是IEEE754单精度,它可以保持指数不大于+/- 38.因此,您尝试转换超出范围的值,该值调用未定义的行为,这意味着结果是不可预测的.如果你改变了类型ans来double,你会看到实际的结果.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |