首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >-2.6至0.2输出功率#IND00 00

-2.6至0.2输出功率#IND00 00
EN

Stack Overflow用户
提问于 2022-06-10 20:31:43
回答 1查看 67关注 0票数 0

目前,我正在为C语言进行实践,我在C\C++中发现了一个关于函数pow()的问题。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <math.h>
int main(){
    double k = 0.2;
    printf("2.6^k = %f\n", pow(2.6, k));
    printf("-2.6^k = %f\n", pow(-2.6, k));

}

产出:

代码语言:javascript
运行
复制
2.6^k = 1.210583
-2.6^k = -1.#IND00

在本例中,2.6的幂为0.2 i̶s̶̶n̶o t̶̶e̶v̶e̶n̶̶a̶̶c̶o̶m̶p̶l̶e̶x̶̶n̶u m̶̶b e̶̶e̶̶r r(编辑:是),但输出显示(如我所认为)该数字是不可确定的。

在我的实践中,有以下内容:图像

我是这样实施的:

代码语言:javascript
运行
复制
/* e = 2.1783; x = -2.6 */
result = pow(cos(pow(x,0.2) - pow(e,-x + sqrt(3))) + 1.61,2);

但是由于(-x + sqrt(3))是负数,它输出:

-1.#IND00

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-10 20:40:48

值0.2不能精确地用二进制浮点表示。所以你拥有的不是0.2,而是一个略高于这个值的值。这将产生一个复杂的结果,因此pow返回NaN。

进一步阅读这一点,C标准关于pow函数的7.12.7.4节指出:

双凸(双x,双y); 如果x是有限的和负的,而y是有限的,而不是整数值,则会发生区域错误。

如果出现域错误,则返回实现定义的值.虽然MSVC似乎没有记录它在本例中所做的事情,但它显然返回了NaN。在Linux的情况下,手册页显式地声明在本例中返回NaN。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72579558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档