我试着pow(x, 1.0/3.0)得到-1#IND00,为什么会这样?我试着做pow(x, 1./3),pow(x, (1.0/3.0)),但没有积极的。只有当x小于0,并且x是浮点数时才有效.示例:
pow(x, 1.0/3.0)
pow(x, 1./3)
pow(x, (1.0/3.0))
x = -3.12; y = pow(x, 1.0 / 3.0); printf("%f", y);
上面的代码将y打印为-1。#IND00
rjee0c151#
pow函数不计算负数的根。关于pow功能的C standard第7.12.7.4p1-2节规定:
pow
double pow(double x, double y);
x
y
因此,您给出的值构成了域错误,如第7.12.1p2节所述:对于所有函数,如果输入参数位于定义数学函数的域之外,则会发生 * 域错误 *。...发生域错误时,函数将返回实现定义的值如果你想计算一个数的立方根,你应该使用cbrt,它接受负值。
cbrt
uajslkp62#
只有当指数为整数时,才能在真实的中定义底为负的幂函数。运算-3.12^0.3在数学中没有定义(在实数中)。*pow()的文档中描述了这一事实:如果底数为有限且为负数,而指数为有限且为非整数,则会发生域错误,并且可能会发生范围错误。
-3.12^0.3
pow()
x^y
2条答案
按热度按时间rjee0c151#
pow
函数不计算负数的根。关于
pow
功能的C standard第7.12.7.4p1-2节规定:double pow(double x, double y);
pow
函数计算x
的y
次幂。如果x
是有限的负数,并且y
是有限的非整数值,则会发生域错误因此,您给出的值构成了域错误,如第7.12.1p2节所述:
对于所有函数,如果输入参数位于定义数学函数的域之外,则会发生 * 域错误 *。...发生域错误时,函数将返回实现定义的值
如果你想计算一个数的立方根,你应该使用
cbrt
,它接受负值。uajslkp62#
只有当指数为整数时,才能在真实的中定义底为负的幂函数。运算
-3.12^0.3
在数学中没有定义(在实数中)。*pow()
的文档中描述了这一事实:如果底数为有限且为负数,而指数为有限且为非整数,则会发生域错误,并且可能会发生范围错误。
x
为负时,x^y
的值是复数,而不是真实的。