use*_*614 5 .net vb.net division operator-precedence
这是VB.NET中一个奇怪的计算错误.我把我的问题简化为以下内容.我可以写:
Console.WriteLine(-0.78125 ^ 2.5)
Run Code Online (Sandbox Code Playgroud)
得到-0.53947966093944366.
但是,如果我改变它Console.WriteLine((-0.78125 + 0) ^ 2.5),我得到-1.#IND.
或者,如果尝试:
Dim D as Double = -0.78125
Console.WriteLine(D ^ 2.5)
Run Code Online (Sandbox Code Playgroud)
我也明白了-1.#IND.
如果我在表达式中使用单个文字数字,我只能得到计算以返回结果,但是当我使用任何数据类型的变量时,我得到-1.#IND.
我已经阅读了解释"-1.#IND"的其他帖子,但是它们表明表达式中的一个数字是NaN,这不是这里的情况.为什么会这样?
你可以通过尝试以下来弄清楚发生了什么:
Console.WriteLine(-1 ^ 0.5)
Run Code Online (Sandbox Code Playgroud)
它打印-1,但实际上它与sqrt(-1)实数中没有结果相同.这很奇怪,不是吗?那么这里发生了什么?
^优先级高于-,-1 ^ 0.5实际上也是如此-(1 ^ 0.5).这就是它打印的原因-1.
您可以在此处检查优先级列表:Visual Basic中的运算符优先级
您的代码也会发生同样的情况.-0.78125 ^ 2.5实际上被解释为-(0.78125 ^ 2.5)有效,但如果你做(-0.78125 + 0) ^ 2.5(或甚至(-0.78125) ^ 2.5)它不再有效,因为它需要从负值计算平方根.这就是你得到NaN(或-1#IND)的原因.
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |