模数和浮点数

问题描述

模数的解释方式是说“ a”可以达到“ b”多少次,而不是乘以,而只需加起来即可。

如果我们要从20中找到1.3的模数,它将相加1.3 + 1.3 +...+ 1.3 = 19.5,其中20-19.5将是0.5

但是,如果我们操作每个人都用模数解释的公式,那就是通过除以乘以然后得到余数,我们将无法获得确切的数字,例如:

6%2 = 07%2 = 1,因为6/2 = 3次和3*2 = 6,这就是答案为0和1的原因,但是如果我们使用20 % 1.3,则它将为{{ 1}}和20/1.3 = 15.384615乘以15.384的时间就是1.3,因此此公式不成立,显示了无法表示模数如何使用浮点数进行运算,而是将{{1 }},然后不通过15.384615385 * 1.3 = 20,它将使1.3添加次数20 = 1.315因此有一个确切的余数。

我想知道这种方法是否正确,Python如何解释模数?

解决方法

20%1.3这将是20 / 1.3 = 15,384615和15,384 乘以1,3就是15,384615385 * 1,3 = 20因此这个公式 是不正确的……

我想知道这种方法是否正确

您的计算不完整;因此结论是错误的。

您必须取整数部分i。 e。 15,乘以1.3,得出19.5,然后从20中减去。得出预期的0.5。

有关Python的实现,请参见float_rem()。它使用fmod()进行计算。输出表示形式是由float_repr()生成的,它调用PyOS_double_to_string()
我们使用C表达式printf("%.17g\n",fmod(20,1.3))得到相同的输出。

浮点计算结果有时不准确也就不足为奇了。