【发布时间】:2017-11-16 17:11:02
【问题描述】:
在 C(以及许多其他语言)中使用整数时,除法时必须注意精度。在除法之前,乘法和加法总是更好的(这样会产生更大的中间结果,只要它不溢出)。
但是花车呢?这还成立吗?或者它们是否以这样一种方式表示:将相似数量级的数量而不是大数量级除以小数量级更好?
【问题讨论】:
-
首先您需要了解浮点数在内存中的表示方式,请参阅this answer(来自软件工程)
-
在使用整数时必须注意精度是什么意思?如果你对一个整数进行除法,那么你使用的是整数除法,所有结果的精度都是第 0 位小数。从这个意义上说,整数除法是精确的。
-
在进行浮点运算时将舍入误差保持在最低限度是一个相当大的话题。作为一个简单的规则,最好是操作数具有相似的大小。例如:将一个小的浮点值添加到一个巨大的浮点值中,根本不会改变巨大的值(前提是两者之间的差异足够大)。
-
是的,但是在大多数情况下,当您实现时,您使用整数除法作为您想要执行的理想除法的退化版本,并且简单地忍受没有小数部分出现的事实。然而,如果你改变单位,你的结果就会改变......例如,你以米为单位工作,然后将 10 米除以 4 得到 2,但如果你切换到毫米,10 000 除以 4 变成 2500,这是一个更好的结果......
-
@4386427 是的,添加(或减去)不同大小的数字会导致精度损失(当添加许多类似大小的数字时,这是一个真正的问题,例如求平均值),但是相乘(或划分)不同数量级的数字并不是那么糟糕。
标签: c floating-point integer division integer-division