c - 当 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;
}
解决方案
当您输入base
和exp
使用时,%c
您会得到字符 '0'
- '9'
,而不是整数值。所以如果你输入 0 和 0,你得到的值(假设 ASCII 编码)实际上会是 48,因为那是'0'
. 48 48的结果大约是 5 x 10 80。
然后将结果值保存在float
. 假设 afloat
是 IEEE754 单精度,它可以保持不大于 +/- 38 的指数。因此,您正在尝试转换调用未定义行为的超出范围的值,这意味着结果是不可预测的。如果您将类型更改为ans
,double
您将看到实际结果。
推荐阅读
- reactjs - Imported node_modules css not working in webpack
- c - twosum problem when array elements are negative
- python - Regex for finding if a phrase is present in any location in a string
- ios - 我需要保留证书签名请求 (CSR) 文件吗?
- arrays - 如何将元素添加到 IDL 中可用于绘图的数组中?
- apache-kafka - Is there a Telegraf plugin which takes in queries to read data from Influxdb and then post them on a kafka topic using the Kafka output plugin?
- reactjs - 如何在 react-big-calander onSelectEvent 的警报中显示两个事件项
- r - 是否可以在闪亮中部署预训练的机器学习模型?
- javascript - flask just refresh templated portion of page
- typescript - 打字稿将动态变量分配给地图对象