在现实世界中,负数的立方根应该存在:
cuberoot(-1)=-1
,意味着 (-1)*(-1)*(-1)=-1
或者
cuberoot(-27)=-3
,意味着 (-3)*(-3)*(-3)=-27
但是当我在C语言中使用pow
函数计算负数的立方根时,却得到了一个nan
(不是一个数字)。
double cuber;
cuber=pow((-27.),(1./3.));
printf("cuber=%f\n",cuber);
输出:cuber=nan
在C语言中有没有计算负数立方根的方法?
pow
函数可以计算一个正数的0.333333333333333314829616256247390992939472198486328125
次方,通常(但不总是)在四舍五入后与立方根相同。 - Stephen Canoncbrt
的接近程度相同(这根本不是保证)。但如果 IEEE 754 可以保证cbrt
的精度,则可能会有其他说法。 - Steve Jessopcbrt
来获得精度。在某些平台上,你应该使用它来提高速度,但真正使用它的原因是因为它可以为负数输入提供“你想要的答案”——pow
无法做到这一点,因为不存在负数的0.333333333333333314829616256247390992939472198486328125次方。 - Stephen Canonexp(y * log(x))
来实现C标准库中的pow
,因为这会得到许多边缘情况错误的结果。例如,尝试一下pow(-27.0, -1.0)
。 - Stephen Canon