首页 > 解决方案 > 当 x 和 y 是字符时,为什么 pow(x,y) 返回 inf?

问题描述

我了解如何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; 
}

标签: ccharpow

解决方案


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

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


推荐阅读