繁体   English   中英

浮点除法不完美

[英]Floating-point division imperfection

我知道浮点数不是完美的,无论是float还是double ,但这是否意味着当我将一个浮点数除以另一个并且被除数除以除数就可以将其除以除数(例如10000.0被除数)乘以10.0),那么我是否有可能得到一个末尾带有.99999999 ...的数字,该数字仅比正确结果小一小部分。 浮点数会发生这种情况吗?

我需要知道,因为我需要在除法之后应用floor函数,如果浮点除法确实不那么完美,那将会产生很大的不同。

这是否意味着,当我将一个浮点数除以另一个而被除数可被除法器整除而没有提醒时(例如10000.0被10.0整除),则可能会得到.99999999 ...的数字结束

否。IEEE754除法正确取整。 如果结果有可表示的浮点数(在您的示例中为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...。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM