浮点除法不完善

Floating-point division imperfection

本文关键字:不完善 除法      更新时间:2023-10-16

我知道浮点数不是完美的,要么是float,要么是double,但这是否意味着,当我用一个浮点数除以另一个浮点数时,红利可以被除数除而不提醒(如10000.0可以被10.0整除),我是否有可能得到一个数字。99999999…最终的结果只比正确的结果小一点点。这样的事情会发生在浮点数上吗?

我需要知道,因为我需要在除法之后应用floor函数,如果浮点除法真的那么不完美,它将产生巨大的差异。

是否意味着,当我用一个浮点数除以另一个浮点数时,被除数可以在没有提醒的情况下被除数整除(比如10000.0可以被10.0整除),我有可能得到一个带有。99999999的数字…在结尾

。IEEE 754除法是正确四舍五入的。如果结果有一个可表示的浮点数(在您的示例中为1000),则这是您将得到的除法结果。

可能发生的情况是,您没有将您正在思考的数字除以,因为您写了0.1,并且您认为这代表数学值0.1。在这种情况下,最终结果可能令人惊讶,但这不是浮点除法的错误。

只要你知道你在除法你想要的数字,如果除法的数学结果是,比如说,小于2的整数24,那么浮点除法的结果将是那个整数

假设硬件使用IEEE 754浮点除法,关键问题是自然数操作数是否完全可表示。

首先,格式具有有限的范围。自然数则不然。然而,即使32位二进制浮点数的限制,大约10^38,对于大多数实际用途来说也足够大了。

在这个范围内,归结为一个自然数是否可以表示为1.x*2^n,其中n为整数,1.x为二进制分数,在二进制点后不超过23位。所有24位的自然数都满足这个条件。

范围内所有2的幂也是如此。

一般来说,浮点数越大,指数越大,连续值之间的间隔也越大。直到24位自然数,间隙不大于1,所以所有的自然数都是可表示的。在下一步,差距是2,然后是4,然后是8……