0

将关于整数和浮点数的相对优点的讨论转移到一个单独的问题中。就是这样:在既不是固有整数也不是固有浮点的情况下,您在整数类型或浮点类型之间的偏好是什么?例如,在为控制良好的尺度范围开发几何引擎时,您更喜欢最小可行单位的整数坐标还是浮点/双坐标?

4

2 回答 2

2

选择浮点的一些原因是:

  • 当您以定点格式相乘时,乘积具有新的比例,因此必须对其进行调整,或者必须编写代码来说明更改后的比例。例如,如果您采用按 100 缩放的格式,因此 .3 用 30 表示,0.4 用 40 表示,那么 30 乘以 40 得到 1200,但相同比例下的正确答案应该是 12(表示 .12 )。分区需要类似的调整。
  • 当整数格式溢出时,许多机器和编程语言对获取结果的最重要部分没有很好的支持。浮点自动生成结果的最重要部分并舍入丢弃的位。
  • 整数算术通常会截断分数,但浮点会将它们四舍五入(除非另有要求)。
  • 一些计算涉及大范围的数字,包括非常大和非常小的数字。定点格式的范围小,而浮点格式的范围大。您可以使用定点格式手动跟踪比例,但您只是使用整数实现自己的浮点。
  • 许多机器和/或编程语言忽略整数溢出,但浮点可以优雅地处理这些和/或在它们发生时提供通知。
  • 浮点运算定义良好,通常实现良好;其中的错误已减少(有时是通过痛苦的经历)。构建新的自己动手算术很容易出现错误。
  • 对于某些函数,很难提前预测结果的规模,所以使用定点格式比较尴尬。例如,考虑正弦。每当输入接近 π 的倍数时,正弦值就接近于零。因为 π 是无理数(且超越数),所以整数或定点数接近 π 倍数的模式非常不规则。一些定点数不接近 π 的倍数,它们的正弦值约为 0.1、0.5、0.9 等。一些定点数非常接近 π 的倍数,并且它们的正弦值接近于零。少数非常接近 π 的倍数,并且它们的正弦很小。因此,没有一种具有合理精度的定点格式可以始终返回正弦结果而不会下溢或上溢。

喜欢整数的一些原因是:

  • 整数运算在特定硬件上可能更快或具有更大的吞吐量。
  • 整数运算为相同的位数提供更高的精度。
  • 在某些语言实现中,对整数运算的某些支持可能会更好。例如,默认设置或具有高精度设置的低质量软件可能会错误地显示浮点值,但软件很少会错误地打印整数值。

我考虑了列出整数算术的某些“特征”作为使用它的理由的方法,但是,经过检查,它们不是实际的特征:

  • 有人可能会说整数运算在溢出之前是精确的。但这是错误的,因为整数算术或定点算术(带刻度的整数算术)并不精确。在给定年利率的情况下计算月利率通常是不准确的。货币之间的转换并不准确。物理计算并不准确。坐标缩放不准确。
  • 就整数运算在溢出之前是精确的而言,它不是一个特征。大多数机器允许整数运算在没有警告的情况下溢出。因此,当整数算术失败时,它会失败得惊人。(使用 IEEE 754 浮点,您可以设计精确的算术并在出现不精确时请求陷阱或标志。)
于 2013-08-27T00:40:06.950 回答
-1

以下是一些关于何时不使用浮点数/双精度并坚持整数/定点的想法

  • 你需要比较平等
  • 您需要可预测的舍入误差或没有舍入误差。(比如处理钱的时候)
  • 精度的大小必须是绝对的,而不是相对于值的大小(有时在处理日期或空间坐标时。时间间隔或距离通常可以使用浮点数)
于 2013-08-26T01:41:21.427 回答