1

在我的 TI-84 Plus (Silver Edition) 上,我可以正确输入以下内容: (-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 和“不确定”。然后在 Google 上输入 (-1)^(1/2) [nonreal ans] 后,我突然意识到我正在使用 nth-roots !因此,事实证明我过去已经在 C# 中管理了虚数,因此解决了我的问题:

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

4

2 回答 2

0

在 C# 中,没有为 R 的非整数值定义 (-1)^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);
}
于 2012-09-27T08:39:39.247 回答
0

您将不得不编写自己的数学助手来执行这样的功能(至少对于Math.Pow)。编辑:或者您可以使用Rational评论中提到的库。

根据文档:

输入:x < 0 但不是 NegativeInfinity;y 不是整数、NegativeInfinity 或 PositiveInfinity。

结果:NaN

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

于 2012-09-27T03:25:21.143 回答