目前,我正在为C语言进行实践,我在C\C++中发现了一个关于函数pow()的问题。
#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));
}产出:
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(编辑:是),但输出显示(如我所认为)该数字是不可确定的。
在我的实践中,有以下内容:图像
我是这样实施的:
/* 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
发布于 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。
https://stackoverflow.com/questions/72579558
复制相似问题