奇怪-1。在VB.NET中#IND错误

时间:2013-09-08 20:23:54

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

这是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,这不是这里的情况。为什么会这样?

1 个答案:

答案 0 :(得分:7)

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

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)的原因。