I just found out that when entering a negative x and a decimal y, Math.Pow() returns the not-defined value as result, which is wrong I guess. Calculating this in other programs, even like the windows Calculator works with a correct result. Also this case is not mentioned in the documentation.

Target Framework is 4.

Can anyone explain this?

有帮助吗?

解决方案

The result is going to be complex number, so you have to use Complex class from System.Numerics namespace.

Complex n = new Complex(-2, 0);
Complex result = Complex.Pow(n, 1.1);

In case if result is real number (integer power), then you can use Math.Pow.

As @JeppeStigNielsen mentioned, the conversion from int/double to Complex is implicit, so the code can be shortened to:

Complex result = Complex.Pow(-2, 1.1);

其他提示

Also this case is not mentioned in the documentation

You sure? From it's documentation;

Parameters

x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity.

Return value

NaN

I'm not sure which OS you tried but it doesn't work in calc.exe (Win7 - 64bit) says Invalid Input.

As Ulugbek mentioned, taking 1.1 power of a negative value creates a complex number. Because (-2)1.1 = (-2)11/10 = (-2)1/1011 and getting 10 times rooth of -2 returns a complex number.

Since Math.Pow takes and returns double values, this doesn't fit with requirements. You can use Complex class from System.Numerics.

http://www.wolframalpha.com/input/?i=-2^1.1

enter image description here

Further reading: How is Math.Pow() implemented in .NET Framework?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top