【问题标题】:Strange -1.#IND error in VB.NETVB.NET 中奇怪的 -1.#IND 错误
【发布时间】:2016-07-06 01:48:10
【问题描述】:

这是 VB.NET 中的一个奇怪的计算错误。我已将我的问题简化为以下内容。我会写:

Console.WriteLine(-0.78125 ^ 2.5)

并获取-0.53947966093944366

但是如果我把它改成Console.WriteLine((-0.78125 + 0) ^ 2.5),我会得到-1.#IND

或者,如果它尝试:

Dim D as Double = -0.78125
Console.WriteLine(D ^ 2.5)

我也收到了-1.#IND

如果我在表达式中使用单个文字数字,我只能得到返回结果的计算,但是当我使用任何数据类型的变量时,我会得到 -1.#IND

我已经阅读了解释“-1.#IND”的其他帖子,但它们表明表达式中的一个数字是NaN,这里不是这种情况。为什么会这样?

【问题讨论】:

  • 改用 .NET 代码,使用 Math.Pow()

标签: .net vb.net division operator-precedence


【解决方案1】:

您可以通过尝试以下操作来弄清楚发生了什么:

Console.WriteLine(-1 ^ 0.5)

它打印-1,但实际上它与sqrt(-1) 相同,后者没有实数的结果。这很奇怪,不是吗?那么这里发生了什么?

^ 的优先级高于-,所以-1 ^ 0.5 实际上是-(1 ^ 0.5)。这就是它打印-1的原因。

您可以在此处查看优先级列表:Operator Precedence in Visual Basic

您的代码也是如此。 -0.78125 ^ 2.5 实际上被解释为 -(0.78125 ^ 2.5) 这是有效的,但如果你这样做 (-0.78125 + 0) ^ 2.5(甚至 (-0.78125) ^ 2.5)它不再有效,因为它需要从负值计算平方根。这就是为什么你会收到NaN(或-1#IND)。

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2015-10-08
    • 2018-01-22
    相关资源
    最近更新 更多