D&D随机计算器开发技术问询:XdY骰子运算及表达式计算问题
1d20结果为10.5的原因
示例给出的是骰子点数的数学期望值,不是单次投掷的随机结果。单个Y面骰子的点数取值为1到Y的整数,每个数值出现概率相等,期望值计算公式为:
单骰子期望 = (最小点数 + 最大点数) / 2 = (1 + Y) / 2
对应1d20的计算结果就是(1+20)/2 = 10.5,和示例完全一致。同理XdY的总期望值为X乘以单骰子期望,即X*(1+Y)/2,你可以验证第三个示例:2d6的期望为2*(1+6)/2=7,1d12的期望为(1+12)/2=6.5,代入表达式计算可得7 + (-6.5/5) = 7 - 1.3 = 5.7,和示例结果完全匹配。
mDn类型运算的处理方案
DataTable原生只支持标准四则运算,无法直接识别XdY语法,你可以按以下步骤适配:
- 第一步:用正则匹配预处理输入表达式,识别所有
XdY格式的子串,匹配规则可参考(\d+)d(\d+) - 第二步:对每个匹配到的
XdY,提取X、Y的整数值,按期望值公式计算出对应双精度浮点数结果 - 第三步:将原表达式中所有
XdY子串替换为计算得到的数值,得到仅含标准四则运算的表达式 - 第四步:将替换后的表达式传入DataTable.Compute方法计算即可,注意配置运算规则为浮点除法,保证
3/2输出1.5而非整数1
内容的提问来源于stack exchange,提问作者Alexander Chernykh
相关产品推荐
相关产品推荐

