【问题标题】:floating and integers....?浮点数和整数....?
【发布时间】:2011-01-04 22:37:39
【问题描述】:

为什么我们需要整数和浮点数?谢谢

【问题讨论】:

  • 我实际上认为这是一个很好的问题。当您从事该行业的时间足够长时,您会认为某些事情是理所当然的。偶尔质疑一下你的假设是个好主意。
  • 我赞成这个问题。它可能闻起来像家庭作业,但它确实引发了一场小型讨论风暴,我认为参与其中的每个人都不是学生。我知道我不是,尽管我今天在家工作。

标签: floating-point processor integer


【解决方案1】:

它们都只是数字,所以你可能认为不需要区分。但是,在许多语言中,在进行整数数学运算时可以进行优化 - CPU 指令可以进行加法、减法、乘法和除法。同样,有些指令对浮点数执行类似的操作,但是由于数字在机器中的表示方式不同,并且操作也不同,因此将处理器中明显的整数和浮点数之间的区别冒泡是有意义的,编程语言本身。

C#、Java、C++ 和其他语言都有不同的类型来处理整数和浮点数。 Javascript 做出了相反的选择——没有特殊的整数类型,如果我没记错的话,所有数字都是浮点数。


至于为什么需要整数和浮点数 - 浮点数允许更广泛的值,尽管在极端情况下(例如,天文数量)精度会下降。您不能在浮点数学中精确地表示 1.37999933247474x10e24 。另一方面,整数为一组固定的数字提供精度和速度。

【讨论】:

    【解决方案2】:

    整数更容易占用处理器资源,而且通常更快。许多年前,这是一件大事,当时处理器甚至没有内置浮点功能。现在不是那么多,但在紧凑的代码中差异仍然很大。

    整数通常就是你所需要的。

    【讨论】:

      【解决方案3】:

      浮点值的范围比整数大[多]。此外,它们可以表示小数值。然而,这些功能是以牺牲精度为代价的。

      编辑:(我的意思是精度损失
      整数运算总是精确的,只要不提供导致溢出或被零除的操作数。
      浮点运算不是这种情况,在简单的操作中使用这些值时,某些部分的值可能会丢失。原因是浮点值提供的巨大范围使得不可能表示该范围内的所有连续值,因为[相对] 较小的存储空间(通常为 8 或 16 个字节)。

      【讨论】:

      • 并非总是如此。 64 位双精度比 32 位整数具有更高的精度。
      • @Mark Ransom。无论大小如何,整数始终在其范围内 100% 精确。这与浮点值不同,浮点值在其范围内可能包含当该值用于各种甚至简单的计算时会丢失的部分。
      • 生成一个表示最大浮点值的常数非常容易,它保证与整数具有相同的精度。浮点通常提供更大的保证。如果将 2147483647 x 2147483647 乘以整数,你会得到什么?作为双打?
      • @mjv:任何确定性数字系统在其规范内都是 100% 精确的。你是说int a = 1/2; 在小学算术方面是 100% 精确的吗?
      • @Potatoswatter 也许 deterministic number system 是合适的关键字。浮点运算只是不确定的。无论如何...高性能马克提供了最佳的整体答案; “我们的工作完成了”;-)
      【解决方案4】:

      整数用于计数,浮点数用于计算。我们在数学中都有它们(它们分别称为整数和实数),因此我们在算法和程序中也需要它们。故事结束。

      当然,大多数 fp 数字实现的范围大于大多数整数实现的范围,但我明天可以发明一种语言,其中我允许 512 位整数但只允许 16 位浮点数(1 个符号位, 3 个指数位,12 个有效位)。整数在除法下仍然没有闭合,浮点数仍然没有用于计数,因为虽然 fp 数有后继函数,但实数上没有,我们喜欢假装 fp 数是实数。

      不,整数在处理器上并不容易,处理器对位进行基本的布尔逻辑运算。如果处理器 X1 进行整数运算的速度比 fp 运算快,那么在内存库中搜索就会找到一个反例。

      我们甚至不需要 fp 数来表示分数,我们可以使用整数对来表示分子和分母。

      整数的绝对精度是我们使用它们进行计数的原因。出于所有实际目的,现有 fp 实现的精度就足够了(现在,有一种疯狂的说法会引起分歧!)

      问候

      标记

      【讨论】:

      • FP 数字不是实数。请不要给 OP 或任何人这样的想法。正如您所提到的,FP 编号不会因除法而封闭。 Infinity 是一个浮点数,但既不是实数也不是整数。
      • 浮点在除法下是绝对封闭的。当您将两个浮点值相除时,您会得到另一个浮点值。总是。如果它们是实数,它可能不完全等于你得到的结果,但这不是 close 的意思。 定义了浮点值的除法以包括此舍入。
      • 哦,我想我们在这里遇到了一个微妙的术语问题。 Potatoswatter 表示“FP 数”,Stephen 表示“浮点值”。那南呢?这是一个浮点变量可以保存的值,但它自己承认它不是一个数字。浮点数字在除法下不闭,但浮点变量的在除法下闭,对吧?
      【解决方案5】:

      整数是编程任务中最常用的东西。它们可以表示内存地址。从一个整数数到下一个整数很容易:只需加一个。

      浮点值用于逼近实数。实数是连续数学中最常见的类型。连续数学用于表示现实世界。 (因此术语“实数”。)

      浮点值通常不能用作整数。您不能轻易地从 X 数到下一个大于 X 的数字。它们四舍五入,并且不能保证 X + 1 甚至是与 X 不同的数字。一般来说,两个浮点数如果它们可能会不同由不同的操作序列产生,即使表达式应该相等。

      浮点数是不可预测的,就像现实生活一样。整数是有序且高效的,就像计算机一样。

      【讨论】:

      • 浮点数是完全可以预测的。当您要求计算机从 1e-32 到 1e+32 时,它不会返回一个随机数。这并不简单,对于普通用户来说当然也不直观。您必须研究相关的实施标准,并愿意在需要时在纸上制定细节。
      • 现实生活的某些方面也是可以预测的,并且通过更多的分析变得更加可预测。这是一个类比。
      【解决方案6】:

      在大多数应用程序中,浮点数可以用整数代替,方法是仔细定义需要以什么精度表示的值范围,并乘以适当的比例因子。但是,这是额外的开发工作,仅在无法在可用时间内进行浮点运算的小型嵌入式平台(即小型微控制器)上才值得。

      只要您保持在可用的范围和精度范围内,您就可以在大多数情况下不用考虑值的表示而摆脱浮点数。不幸的是,这是相当危险的,因为这样您在离开安全区域时可能不会注意到。

      【讨论】:

        【解决方案7】:

        稍微不同的观点:整数适用于数字量,而浮点数适用于模拟量。举个例子,在查看港口的船只时,使用整数来计数船只,使用浮点数来表示水位。

        【讨论】:

          猜你喜欢
          • 2017-07-26
          • 2011-01-10
          • 2012-02-11
          • 2015-01-20
          • 2011-04-20
          • 1970-01-01
          • 2017-11-16
          • 2010-12-26
          • 2011-04-19
          相关资源
          最近更新 更多