当x和y是字符时,为什么pow(x,y)返回inf?

Nik*_*ako 1 c char pow

我理解如何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)

dbu*_*ush 5

当您输入baseexp使用时,%c您将获得字符 '0' - '9'而不是整数值.因此,如果输入0和0,您获得的值(假设ASCII编码)实际上将为48,因为这是ASCII代码'0'.48 48的结果大约是5 x 10 80.

然后,将结果值保存在a中float.假设a float是IEEE754单精度,它可以保持指数不大于+/- 38.因此,您尝试转换超出范围的值,该值调用未定义的行为,这意味着结果是不可预测的.如果你改变了类型ansdouble,你会看到实际的结果.