取模 fractions.Fraction class

Modulo with fractions.Fraction class

我的目标是找到包含非常大整数的 numpy 数组的 np.mod(np.array[int], some_number)。 Some_number 是有理数,但通常不是精确的小数。我想确保模数尽可能准确,因为我需要在后面的步骤中对直方图的结果进行分箱,因此由于浮点精度引起的任何错误都可能意味着值将最终出现在错误的分箱中。

我知道带浮点数的模函数受浮点精度的限制,所以我在犹豫是否使用 np.mod(array[int], float)。 然后我遇到了 python 库的分数模块。有人可以就通过 np.mod(np.array[int], Fraction(int1, int2)) 获得的结果是否比使用浮点数更准确提出建议吗?如果不是,解决此类问题的最佳方法是什么?

所以你有分数some_number=n/d

计算模数就像执行此除法:

a = q*(n/d) + (r/d)

余数是分子为r的分数。 可以这样写:

a*d = q * n + r

您遇到的问题是 a*d 可能会溢出。 但是问题可以这样写:

a = q1 * n + r1
d = q2 * n + r2

a*d = (q1*q2*n+q1*r2+q2*r1) * n + (r1*r2)

鉴于n/d在10到100之间,n>d,q2=0,r2=d,算法为

  1. 计算模 n => r1
  2. 计算 (r1*d) 模 n => r
  3. r 除以 d => 取模 n/d

如果是放入垃圾箱,则不需要第3步