【问题标题】:Modulus and float numbers模数和浮点数
【发布时间】:2020-10-09 00:05:16
【问题描述】:

如何解释模数是通过说“a”可以达到“b”多少次,而不是通过乘法,只是通过相加。

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

但是如果我们操作大家用模数解释的公式,也就是除以乘,再取余数,就不会得到一个准确的数,例如:

6%2 = 07%2 = 1 因为 6/2 = 33*2 = 6,所以答案是 0 和 1,但如果我们使用 20 % 1.3,这将是 20/1.3 = 15.38461515.384 乘以 @987654334 @ 是 15.384615385 * 1.3 = 20,因此这个公式不正确,并且表明无法表达模数如何与浮点数一起使用,但是通过将 1.3 相加然后不传递 20,它将给出 1.3 添加 15次 = 19.520 - 19.5 = 0.5 因此我们有一个精确的余数。

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

【问题讨论】:

标签: python modulus


【解决方案1】:

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

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

您的计算不完整;所以结论是错误的。

你必须取整数部分,即。 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)) 得到相同的输出。

浮点计算结果有时不准确并不奇怪。

【讨论】:

  • 是的,我知道那个方法,但它仍然浮动并给出 0.49999933 数字,这不是“完全”,因此如果你想对一个浮点数进行模数,你需要手动进行,并编码公式,我想知道python是如何操作模数的,因为它不是0.5而是0.499999933
  • 我扩展了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2019-04-19
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 2017-07-26
相关资源
最近更新 更多