热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

奇怪的1。在VB.NET#印第安纳错误-Strange-1.#INDerrorinVB.NET

HeresaweirdcalculationerrorinVB.NET.Ivesimplifiedmyproblemtothefollowing.Icanwrite

Here's a weird calculation error in VB.NET. I've simplified my problem to the following. I can write:

在VB.NET中有一个奇怪的计算错误。我将我的问题简化为以下内容。我可以写:

Console.WriteLine(-0.78125 ^ 2.5)

and get -0.53947966093944366.

-0.53947966093944366。

But if I change it to Console.WriteLine((-0.78125 + 0) ^ 2.5), I get -1.#IND.

但是如果我改变Console.WriteLine(-0.78125(-0.78125 + 0)^),我得到1。#印第安纳州。

Or, if it try:

或者,如果它试一试:

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

I also get -1.#IND.

我也得到1。#印第安纳州。

I can only get the calculation to return a result if I use a single literal number in the expression, but when I use a variable of any data type I get -1.#IND.

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

I've read the other posts that explaining "-1.#IND", but they indicate that one of the numbers in the expression is NaN, which is not the case here. Why is this happening?

我读过其他解释“-1”的文章。但是它们表明表达式中的一个数字是NaN,这里不是这样的。为什么会这样?

1 个解决方案

#1


7  

You can figure out what's going on by trying following:

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

Console.WriteLine(-1 ^ 0.5)

It prints -1, but in fact it is the same as sqrt(-1) which does not have a result in Real numbers. That's weird, isn't it? So what's going on here?

它输出-1,但实际上它和sqrt(-1)是一样的,它不会产生实数。这是奇怪的,不是吗?这是怎么回事?

^ has higher precedence than -, so -1 ^ 0.5 is actually -(1 ^ 0.5). That's why it prints -1.

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

You can check the precedence list here: Operator Precedence in Visual Basic

您可以在这里检查优先列表:Visual Basic中的操作符优先级

The same happens with your code. -0.78125 ^ 2.5 is actually interpreted as -(0.78125 ^ 2.5) which is valid, but if you do (-0.78125 + 0) ^ 2.5 (or even (-0.78125) ^ 2.5) it's not valid anymore, because it would require calculating square root from negative value. That's why you're getting NaN (or -1#IND).

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


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
author-avatar
ccmmm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有