当两个操作数是整数且均分时,浮点除法是否总是准确的?
Is float division always accurate when the two operands are integers and evenly divide?
当我除以两个精确表示整数的 IEEE 754 双精度数时,我能始终相信我会得到准确的值吗?
例如:
80.0/4.0
=> 20.0
结果正好是20.0
。
是否有一些潜在值导致结果不准确,例如 19.99999999
?
根据维基百科,
[floating point] division is accomplished by subtracting the divisor's exponent from the dividend's exponent, and dividing the dividend's significand by the divisor's significand.
如果一个数整除另一个数,则前者的尾数应整除后者的尾数。这会给你一个准确的结果。
如果两个整数都可以用浮点格式精确表示(即对于双精度数,它们小于 253),那么是的,您将得到准确的值。
浮点不是某种疯狂的模糊随机算法,它确实具有明确定义的确定性行为。精确的操作将始终给出精确的答案,而不精确的操作将舍入到可表示的值(假设您没有对舍入模式做任何有趣的事情): "problems" 在(1)输入是不能完全表示(例如 0.1,或 1020),或 (2) 您正在执行多个操作,其中一些操作可能会导致中间舍入。
当我除以两个精确表示整数的 IEEE 754 双精度数时,我能始终相信我会得到准确的值吗?
例如:
80.0/4.0
=> 20.0
结果正好是20.0
。
是否有一些潜在值导致结果不准确,例如 19.99999999
?
根据维基百科,
[floating point] division is accomplished by subtracting the divisor's exponent from the dividend's exponent, and dividing the dividend's significand by the divisor's significand.
如果一个数整除另一个数,则前者的尾数应整除后者的尾数。这会给你一个准确的结果。
如果两个整数都可以用浮点格式精确表示(即对于双精度数,它们小于 253),那么是的,您将得到准确的值。
浮点不是某种疯狂的模糊随机算法,它确实具有明确定义的确定性行为。精确的操作将始终给出精确的答案,而不精确的操作将舍入到可表示的值(假设您没有对舍入模式做任何有趣的事情): "problems" 在(1)输入是不能完全表示(例如 0.1,或 1020),或 (2) 您正在执行多个操作,其中一些操作可能会导致中间舍入。