好的,所以我从this question收集到当你使用带有非整数指数的负数来获取pow()时,结果是NaN。
所以我的问题是:我可以使用一些替代方法来获得答案吗?我只是希望能够做到这样的事情:
MyPowFunction(-3125, 0.2);
并且结果为(正确)-5。
有什么想法吗?
作为附录,可能这样做(不知何故)。谷歌已经弄明白了:https://www.google.com/search?q=%28-3125%29%5E0.2&oq=%28-3125%29%5E0.2
还有一点需要注意:我对双重结果不感兴趣 - 我的结果非常复杂。
答案 0 :(得分:4)
如果a 正且b是(复数)任意,则可以将^ b定义为exp(b log a)。这直接扩展了b是有理数的情况。
现在,如果a是复杂的(但非零),可以通过类比(正确的术语是“解析延续”)将^ b定义为exp(b Log a),其中Log是<强>一个可能的逆的exp。
例如,一个可能的Log函数(有很多,不同的是2 i pi的倍数)
Log z = log |z| + i(arg z + 2k pi), k as you wish
检查对于任何k,这给出了与exp的反转(我跳过关于定义域的细节:只是假装只有一个z,我们想要找到Log z这样exp(Log z)= z )。
您选择k的方式将因此影响答案。如果b是不合理的,那么
"a^b" = exp(b Log a) = exp(ib arg a) * exp(2i k pi * b) * |a|
由于k可以是任意的,exp(2i k pi * b)可以任意接近你想要的单位圆数(单位圆=单位模数的数字),有无穷多的“a ^”值b“可能。
如果b是理性的(例如0.2 = 1/5),那么你将获得5个不同的候选者,其中一个是^ 0.2(其中一个是真实的)。
答案 1 :(得分:2)
问题在于-5
不“数学上正确的答案”,原因如下:
答案 2 :(得分:1)
将负数增加到非整数幂会产生复杂的结果。您可以使用.NET 4中提供的System.Numerics.Complex类来计算它。例如:
using System;
using System.Numerics; // Add reference to System.Numerics!!
class Program {
static void Main(string[] args) {
var c = new Complex(-3125, 0);
var p = Complex.Pow(c, 0.2);
Console.WriteLine(p);
var result = p.Magnitude;
Console.WriteLine(result);
Console.ReadLine();
}
}
输出:
(4.04508497187474, 2.93892626146237)
5
使结果为负值将需要一些富有想象力的虚构操作。 result.Phase
的值不足以保证在任何合理的预测中都是负数。