在现实世界中,应该存在负数的立方根:
cuberoot(-1)=-1,这意味着(-1)*(-1)*(-1)=-1
或者
cuberoot(-27)=-3,这意味着(-3)*(-3)*(-3)=-27
但是当我使用pow函数计算C中负数的立方根时,我得到nan(不是数字)
double cuber;
cuber=pow((-27.),(1./3.));
printf("cuber=%f\n",cuber);
Run Code Online (Sandbox Code Playgroud)
输出: cuber=nan
有没有办法计算C中负数的立方根?
我试图找到一个负数的立方根,但我得到一个NaN.有帮助吗?
System.out.println(Math.pow(-8, 1.0 / 3.0));
Run Code Online (Sandbox Code Playgroud) 不,这(我的理解)不涉及整数除法或浮点舍入问题.
我的确切代码是:
static void Main(string[] args)
{
double power = (double)1.0 / (double)7.0;
double expBase = -128.0;
System.Console.WriteLine("sanity check: expected: -128 ^ 0.142857142857143 = -2. actual: " + expBase + " ^ " + power + " = " + Math.Pow(expBase, power));
System.Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
sanity check: expected: -128 ^ 0.142857142857143 = -2. actual: -128 ^ 0.14285
7142857143 = NaN
此代码的目标框架是(根据解决方案属性).NET Framework 4.0 Client Profile.
奇怪的是,我在网上的任何地方都没有发现这一点.我在这里吃疯了吗??
我观察到以下Javascript行为:
> Math.pow(4, 2)
16
> Math.pow(4, 2.1)
18.37917367995256
> Math.pow(4, 0.5)
2
> Math.pow(-4, 2)
16
> Math.pow(-4, 2.1)
NaN
> Math.pow(-4, 0.5)
NaN
Run Code Online (Sandbox Code Playgroud)
为什么给出一个负数和一个非整数但有理数的数字会让人Math.pow回归NaN?
例如,为什么Math.pow(4, 0.5)是不是 NaN,但Math.pow(4, -0.5) 就是 NaN?