You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何精确计算桌游战斗平均剩余回合数的数学极限值

桌游战斗平均剩余回合数精确计算方案

问题背景

我在开发桌游赔率计算器时,需要计算单场战斗的平均持续回合数。战斗过程存在双方同时未命中的可能,理论上战斗可以无限持续,无法遍历全部分支路径,必须通过数学极限方法完成计算。
我通过模拟器验证,如下近似函数可以得到接近正确的结果,迭代上限LIMIT取值越大,计算精度越高:

// LIMIT 可取任意数值,取值越大结果精度越高
const LIMIT = 100;
// r: 至少一方命中时的剩余回合数
// x: 双方同时未命中的概率,该情况回合数+1,但战斗状态不发生变化
function approximateLimitForNumberOfRounds(r: number, x: number) {
  let approx = r / (1 - x);
  // n 趋近于无穷大
  for (let n = 1; n < LIMIT; n++) {
    approx += x ** n;
  }
  return approx;
}

已知参数x为概率值,取值范围满足0 < x < 1,需要修改上述函数,实现剩余回合数的精确计算,而非近似计算。


实现方案

原近似逻辑本质是计算无穷等比级数的部分和,利用无穷等比级数的闭式求和公式,可以直接得到精确结果,不需要循环迭代。

推导过程

  1. 代码中循环的作用是计算级数 sum_{n=1}^{LIMIT-1} x^n 的部分和。由于约束为0 < x < 1,当n趋近于无穷时x的高次幂会收敛到0,该无穷等比级数(首项为x、公比为x)的精确和为:

    sum_{n=1}^∞ x^n = x/(1 - x)

  2. 代入原函数的极限表达式,合并后可得到精确值公式:
    精确值 = r/(1-x) + x/(1-x) = (r + x)/(1 - x)

精确计算代码

/**
 * 计算战斗剩余平均回合数(精确值)
 * @param r 至少一方命中时的剩余回合数
 * @param x 双方同时未命中的概率,取值范围(0,1)
 */
function calculateExactRounds(r: number, x: number): number {
  return (r + x) / (1 - x);
}

逻辑校验

  • 当x趋近于0(几乎不会出现双miss),返回值趋近于r,符合无miss时的回合数预期
  • 当x趋近于1(几乎必定双miss),返回值趋近于无穷大,符合战斗可能无限持续的逻辑

内容的提问来源于stack exchange,提问作者wvdz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:12:14