为什么当 x 和 y 是字符时 pow(x,y) return inf?
Why does pow(x,y) return inf when x and y are chars?
我知道如何正确使用 pow()
我只是想知道为什么当我 运行 这段代码时 ans
= inf。
我很难理解。
这与 chars 只能取值 -128 到 +127 以及 pow()
的计算方式有什么关系吗?
这与我的第一个 scanf
参数中 " %c"
中的 space 有什么关系吗?
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;
}
当您使用 %c
输入 base
和 exp
时,您会得到 个字符 '0'
- '9'
,而不是整数值。所以如果你输入 0 和 0,你得到的值(假设 ASCII 编码)实际上是 48,因为那是 '0'
的 ASCII 码。 4848 的结果大致是 5 x 1080.
然后将结果值保存在 float
中。假设 float
是 IEEE754 单精度,它可以容纳一个不大于 +/- 38 的指数。因此您正在尝试转换一个超出范围的值,该值会调用未定义的行为,这意味着结果是不可预测的。如果将 ans
的类型更改为 double
,您将看到实际结果。
Base 和 exp 不是整数值 (0-9)。所以你要输入“%d”。不是“ %c”
我知道如何正确使用 pow()
我只是想知道为什么当我 运行 这段代码时 ans
= inf。
我很难理解
这与 chars 只能取值 -128 到 +127 以及 pow()
的计算方式有什么关系吗?
这与我的第一个 scanf
参数中 " %c"
中的 space 有什么关系吗?
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;
}
当您使用 %c
输入 base
和 exp
时,您会得到 个字符 '0'
- '9'
,而不是整数值。所以如果你输入 0 和 0,你得到的值(假设 ASCII 编码)实际上是 48,因为那是 '0'
的 ASCII 码。 4848 的结果大致是 5 x 1080.
然后将结果值保存在 float
中。假设 float
是 IEEE754 单精度,它可以容纳一个不大于 +/- 38 的指数。因此您正在尝试转换一个超出范围的值,该值会调用未定义的行为,这意味着结果是不可预测的。如果将 ans
的类型更改为 double
,您将看到实际结果。
Base 和 exp 不是整数值 (0-9)。所以你要输入“%d”。不是“ %c”