在任何一种情况下都会出现整数或浮点数?

时间:2013-08-25 21:52:50

标签: c++ types floating-point precision scientific-computing

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

2 个答案:

答案 0 :(得分:2)

偏好浮点的一些原因是:

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

偏好整数的一些理由是:

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

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

  • 有人可能会说整数算法是精确的,直到溢出为止。但这是错误的,因为整数运算或定点运算(带刻度的整数运算)并不精确。按月计算每月利息通常是不准确的。货币之间的转换并不准确。物理计算并不准确。坐标缩放不准确。
  • 如果整数算法在溢出之前是精确的,那么它就不是一个特征。大多数机器允许整数运算溢出而不发出警告。因此,当整数运算失败时,它会失败。 (使用IEEE 754浮点数,您可以设计精确算术并在发生不精确时请求陷阱或标记。)

答案 1 :(得分:-1)

这里有一些想法,当不使用浮点数/双打并坚持整数/固定点

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