如何计算两个数之比的极限?

0 投票
3 回答
1385 浏览
提问于 2025-04-28 20:58

我需要计算两个数字的比值,这两个数字是在一个循环中计算出来的。问题是,b 变得太大了,有时候它的值会变成 numpy.inf,也就是无穷大。不过,a/b 的比值应该是存在的,而且不应该是零。

for i in range(num_iter):
    a += x[i]
    b += y[i]
return a/b

有没有什么技巧可以用来计算这种极限值呢?

如果这个问题不适合这个网站,请告诉我。

更新:

这个循环是有限的,我有两个数组 xy,可以提前分析一下它们的值是否很大。

我在想,把 xy 除以一个很大的数字(重新缩放)可能会有效果?

暂无标签

3 个回答

0

基于Chepner的想法,我们可以分别跟踪浮点数和整数部分,然后当整数部分大于1时再把它加回来。可以这样做:

for i in range(num_iter):
    afloat += ... - int(...)
    bfloat += ... - int(...)
    a += int(...) + int(afloat)
    b += int(...) + int(bfloat)
    afloat += int(afloat)
    bfloat += int(bfloat)
return a/b
0

你没有说明在循环中每次对 ab 加了什么,但可以推测这两个值会变得非常大,以至于把增加的部分截断成整数所带来的误差在最终结果中几乎可以忽略不计。这样,你就可以使用任意大小的整数,而不是浮点数,因为浮点数的大小是有限制的,并且精度也有限。

for i in range(num_iter):
    a += int(...)
    b += int(...)
return a/b
0

如果 ab 的长度相同,那么它们的平均值的比例就等于它们总和的比例。如果长度不一样,你可以用项目数量的比例来调整你的比例。

for i in xrange(num_iter):
    numpy.append(a, ...)
    numpy.append(b, ...)

return (mean(a)/mean(b)) * (float(len(b))/len(a))

这样做可能会比较慢,而且会占用更多的内存,但我觉得应该是可行的。

如果你不想保存所有的数据,可以每隔 N 个元素计算一次平均值,当你需要计算时再进行加权平均。

撰写回答