浮点除法不完美

Des*_*ume 0 c c++ floating-point division

我知道浮点数并不完美,无论是它float还是double,但它是否意味着,当我将一个浮点数除以另一个浮点数并且除数可被除法器整除而没有提醒(如10000.0可被10.0整除) ),有可能我得到一个数字.99999999 ...在最后只有一小部分小于正确的结果.浮点数会发生这种情况吗?

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

Pas*_*uoq 7

这是否意味着,当我将一个浮点数除以另一个并且除数可被分频器整除而没有提醒(如10000.0可被10.0整除),我可能得到一个数字为.99999999 ... at结束

没有.IEEE 754分区是正确的四舍五入.如果结果中存在可表示的浮点数(在您的示例中为1000),则这是您将获得除法的结果.

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

只要你知道你正在划分你所指的数字,如果除法的数学结果是一个低于2 24的整数,那么浮点除法的结果就是那个整数.

  • @DesmondHume"无论数字有多大或多小,只要它们代表没有小数部分的自然数......"是的,但请注意,一些大于2 ^ 24的自然数不能表示为"浮动"(限制是2 ^ 53为'double`)."在任何CPU上"这必须是至少近似实现IEEE 754的CPU(和编译平台).任何IA-32,x86-64或现代ARM咒语都符合条件. (3认同)