C语言 当x为负数时,为什么对pow(x,1.0/3.0)返回-1.#IND00?

ercv8c1e  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(190)

我试着pow(x, 1.0/3.0)得到-1#IND00,为什么会这样?
我试着做pow(x, 1./3)pow(x, (1.0/3.0)),但没有积极的。
只有当x小于0,并且x是浮点数时才有效.
示例:

x = -3.12;
   y = pow(x, 1.0 / 3.0);
   printf("%f", y);

上面的代码将y打印为-1。#IND00

rjee0c15

rjee0c151#

pow函数不计算负数的根。
关于pow功能的C standard第7.12.7.4p1-2节规定:

  • 1.* double pow(double x, double y);
  • 2.* pow函数计算xy次幂。如果x是有限的负数,并且y是有限的非整数值,则会发生域错误

因此,您给出的值构成了域错误,如第7.12.1p2节所述:
对于所有函数,如果输入参数位于定义数学函数的域之外,则会发生 * 域错误 *。...发生域错误时,函数将返回实现定义的值
如果你想计算一个数的立方根,你应该使用cbrt,它接受负值。

uajslkp6

uajslkp62#

只有当指数为整数时,才能在真实的中定义底为负的幂函数。运算-3.12^0.3在数学中没有定义(在实数中)。*
pow()的文档中描述了这一事实:
如果底数为有限且为负数,而指数为有限且为非整数,则会发生域错误,并且可能会发生范围错误。

  • 这在技术上并不完全正确,但对于大多数指数,当x为负时,x^y的值是复数,而不是真实的。

相关问题