将-1提高到基于有理分数的幂的问题



在我的TI-84 Plus(银色版)上,我可以无错误地输入以下内容:(-1)^(1/3)=-1我还知道,输入一些表达式,如以下,会产生一个非实数-虚数,如:(-1)^.5

现在,我的问题是C#的Math对象。如果我发送任何分数,比如:{1.667, 109.667, 0.667, 120.667} OR {4/3, 111/3, 2/3, 122/3},我会得到:{NaN, NaN, NaN, NaN}

我是否必须编写一个新的对象MathHelper来检查有理值并根据有限的输入开关返回答案?或者我缺少的Math对象有什么功能。我可以在计算器上做这个。。。

PS,我还没有在网上遇到任何类似的问题;因此,如果这是副本,请通知我;)

[我的新观点]
感谢大家的帮助!我已经完成了将"Microsoft.Solver.Foundation.dll"升级到4.0目标框架的操作,结果发现"Rational"对象似乎只返回-1和"Indeterminate"。然后,在谷歌上输入(-1)^(1/2)[noreal ans]后,我意识到我在使用第n个根!!因此,事实证明,我过去已经在C#中管理过虚数,因此解决了我的问题:

Any even root 2n of a negative number -m will always equal an imaginary number i. (2n√-m)=i我简直不敢相信我忘记了这个简单的代数性质

您必须编写自己的数学助手才能执行这样的函数(至少对于Math.Pow)。编辑:或者你也可以像评论中提到的那样使用Rational库。

根据文件:

输入:x<0,但不是否定不确定性;y不是整数、负无穷大或正无穷大。

结果:NaN

在此处查看文档:http://msdn.microsoft.com/en-us/library/system.math.pow.aspx

在C#中,(-1)^R不是为R的非整数值定义的。如果您尝试计算(-1)^(1/3),C#将首先计算1/3,从而得到R的非整数浮点数。

解决方案:使用数学恒等式:

a^(x/y) = a^x * a^(1/y)  x,y integers

对于负a,使用:

a^1/y = -(|a|^1/y)  // only works if y is odd

或者放在一起:

if (a < 0) {
if (y % 2 = 1) {
result = a^x * -1 * (-a)^(1.0/y);   // Replace ^ with the correct C# call.
} else {
// NaN
}
} else {
result = a^(x/y);
}

相关内容

  • 没有找到相关文章

最新更新