Math 当两个操作数为整数且等分时,浮点除法是否总是精确的?

Math 当两个操作数为整数且等分时,浮点除法是否总是精确的?,math,floating-point,precision,division,Math,Floating Point,Precision,Division,我能相信当我除以两个IEEE 754双精度整数时,我得到的是精确的值吗 例如: 80.0/4.0 => 20.0 结果正好是20.0 是否存在一些结果不准确的潜在值,如19.9999999 根据维基百科 [浮点]除法是将除数的指数减去除数的指数,然后将除数的有效位除以除数的有效位 如果一个数平均除以另一个数,则前者的有效位应平均除以后者的有效位。这将为您提供一个精确的结果。如果两个整数都可以用浮点格式精确表示(即对于双精度,它们小于253),则您将获得精确的值 浮点运算不是一种疯狂的模糊

我能相信当我除以两个IEEE 754双精度整数时,我得到的是精确的值吗

例如:

80.0/4.0
=> 20.0
结果正好是
20.0


是否存在一些结果不准确的潜在值,如
19.9999999

根据维基百科

[浮点]除法是将除数的指数减去除数的指数,然后将除数的有效位除以除数的有效位


如果一个数平均除以另一个数,则前者的有效位应平均除以后者的有效位。这将为您提供一个精确的结果。

如果两个整数都可以用浮点格式精确表示(即对于双精度,它们小于253),则您将获得精确的值


浮点运算不是一种疯狂的模糊随机算法,它确实具有定义良好的确定性行为。精确的运算总是给出精确的答案,不精确的运算将舍入到可表示的值(假设您的舍入模式没有做任何有趣的事情):“问题”出现在(1)输入不可精确表示(如0.1或1020)或(2)您正在执行多个运算,其中一些可能会导致中间舍入。

。。。你的问题是:当我把两个代表整数的IEEE 754双精度除法时,结果是准确的,我能始终相信吗?因为你写的问题完全是假的。整数是无界的,所以只需取一个足够大的偶数
a
除以
2
,它的浮点表示为
+无穷大
,就可以得到
a/b
的错误结果。首先,假设int-to-float转换是准确的/正确的。您甚至假设编译器以您希望的精度将fixed或float转换为程序的二进制形式。我们已经看到所有这些事情在正常情况下都会失败。那么是的,正如Kevin在下面所说的,只要尾数不偏离尾数,那么这一点上的数学就是整数数学,如果它得到的是一个整数,那么在规范化之后,它不会偏离尾数的尾数,那么它是准确的。我认为一个旧的hp计算器是15/3,得到4.99999或15/5,得到2.99999或类似的东西,这并不难搞错。同样在著名的奔腾bug出现的时候,微软的计算器也有一个与奔腾bug无关的类似bug。这些细节让我记忆犹新。底线如果您想要精确的整数,请停止使用浮点。如果你想做得足够好,但又不想处理高精度的问题,那么就使用浮点运算。@Bakuriu你是对的。编辑我的问题。感谢您捕捉到:)可能的副本