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

时间:2018-08-10 00:59:29

标签: c char pow

我了解如何正确使用pow(),我只是想知道为什么当我运行这段代码ans = inf时。

我很难理解this

这与char只能使用-128到+127以及计算pow()的方式有什么关系吗?

这和我的第一个" %c"参数中的scanf中的空格有关吗?

Linux 4.9.0-7-amd64 Debian的4.9.10-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; 
}

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

基数 exp 不是整数值(0-9)。因此,您要输入“%d”。不是“%c”