VB.NET中为何会出现如此奇怪的bug?

2026-05-06 08:371阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计447个文字,预计阅读时间需要2分钟。

VB.NET中为何会出现如此奇怪的bug?

这是VB.NET中的一个计算错误。我将我的问题简化如下:

vbConsole.WriteLine(-0.78125 ^ 2.5) 并得到 -0.53947966093944366.但如果我将它改为 Console.WriteLine((-(-0.78125) ^ 2.5)), 我得到 0.53947966093944366.

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

Console.WriteLine(-0.78125 ^ 2.5)

并得到-0.53947966093944366.

但如果我将其更改为Console.WriteLine(( – 0.78125 0)^ 2.5),我得到-1.#IND.

或者,如果尝试:

VB.NET中为何会出现如此奇怪的bug?

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

我也得到-1.#IND.

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

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

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

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

本文共计447个文字,预计阅读时间需要2分钟。

VB.NET中为何会出现如此奇怪的bug?

这是VB.NET中的一个计算错误。我将我的问题简化如下:

vbConsole.WriteLine(-0.78125 ^ 2.5) 并得到 -0.53947966093944366.但如果我将它改为 Console.WriteLine((-(-0.78125) ^ 2.5)), 我得到 0.53947966093944366.

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

Console.WriteLine(-0.78125 ^ 2.5)

并得到-0.53947966093944366.

但如果我将其更改为Console.WriteLine(( – 0.78125 0)^ 2.5),我得到-1.#IND.

或者,如果尝试:

VB.NET中为何会出现如此奇怪的bug?

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

我也得到-1.#IND.

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

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

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

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