使用方法
- 先在「你的问题」里写下要问的事,最多 80 字,例如「我明天该带伞出门吗?」。这一栏可以留空——留空时球照常出答案,只是记录里不显示问题,方便你只想要一个随机结果。
- 在「一次摇几次」里填 1(示例值),允许 1~50 的整数。填 1 就是经典用法:一次提问出一次答案;填 10 会连续抽出 10 条,用来直观感受答案池的分布,而不是「问 10 次更好」。
- 点「摇一摇」,或直接在输入框里按 Enter。球面区域会立刻换成新答案,下方同步显示英文原句、中文释义、所属类别与这条答案在池里的序号。
- 每次抽取都会追加到下方的问答记录里,并实时统计三类答案各出现几次、占比多少。记录只存在当前页面,刷新即清空。
- 「复制问答」把记录按纯文本复制,方便贴到聊天窗口;「复制对照表」把 20 条答案的对照表按 TSV 复制;「导出 CSV」下载带 BOM 的表格文件,用 Excel 打开中文不乱码。
- 「载入示例」把问题和次数恢复成默认值并重新摇一次;「清空记录」只清空历史与统计,不影响当前这条答案。
这个魔法8球能解决什么问题
一是把「反复权衡却迟迟不决」变成一次终结。生活里很多小选择——今天吃面还是吃饭、先写邮件还是先开会、周末去公园还是去看展——两个选项的实际差别很小,纠结的成本却很高。摇一次球给结果一个外部理由,可以干脆地结束这个循环。
二是给讨论提供一个不带立场的第三方。团队里两个人各执一词时,把问题交给球来处理「谁先讲」这类无实质差异的顺序问题,可以避免把时间花在安排顺序本身。这里的关键是:只把它用在本来就没有优劣差别的事情上。
三是把「随机」这件事讲清楚。很多人以为「随机」就是随便挑一条,其实要让 20 条答案各自以 1/20 的概率出现,需要严格等概率的取数方法。本页把答案池分组、概率、拒绝采样的接受率全部列成可核对的数字,你能自己算一遍。
四是可控的批量观察。想看看「模糊类答案真的只占四分之一吗」,可以把次数拉到 50,连摇几轮,把统计百分比和理论值 25% 对照;摇的次数越多,百分比越贴近理论比例。
本页不做这些事:不做预测、不做建议、不做任何「吉凶」判断,也不根据问题内容改变答案分布。无论你问什么,20 条答案被抽中的机会永远相同。如果你要的是带权重的随机——比如让「是」出现得更频繁——那属于另一个问题,本页不提供这种能力。
生成原理:二十条答案池与等概率抽取
答案池是固定的 20 条。经典 8 号球(Magic 8-Ball)自 20 世纪 50 年代定型以来一直是 20 条答案,并按语气分成三组:肯定 10 条、模糊 5 条、否定 5 条。这个 10 : 5 : 5 的配比不是随意定的,它让「肯定」恰好占一半、另外两类各占四分之一,因此三类答案的概率是 50% / 25% / 25%,单条答案被抽中的概率都是 5%。
抽一条本质上是「取一个 0 到 19 的等概率整数」。最朴素的写法是 Math.floor(Math.random() * 20),它能用,但存在理论上的偏差:Math.random() 在 [0,1) 上均匀输出的是 253 = 9,007,199,254,740,992 个等距值,这个数除以 20 余 12,于是下标 0~11 这 12 条答案各多分到 1 个输入值,相对偏差约为 1/450,359,962,737,049,也就是 2.22×10−15。这在工程上完全可以忽略,但既然本页要讲「严格等概率」,就把它做到位。
本页用拒绝采样消除取模偏差。取数走 crypto.getRandomValues(new Uint32Array(1)),得到 0 到 4,294,967,295 之间的均匀整数。直接写 v % 20 会因为 4,294,967,296 不能被 20 整除而让前 16 个值多出现一次;所以先算接受上限 Math.floor(4,294,967,296 / 20) × 20 = 4,294,967,280,落在 4,294,967,280 到 4,294,967,295 这最后 16 个值一律丢弃重抽。接受率是 4,294,967,280 / 4,294,967,296 = 99.9999996%,一次成功的期望重试次数只有 1.0000000037 次,代价可以忽略,换来的是严格均匀的下标。
批量抽取的期望与波动。摇 n 次时,某一类答案出现次数服从二项分布 B(n, p),期望是 n·p,标准差是 sqrt(n·p·(1−p))。以肯定类 p = 0.5 为例,摇 50 次期望 25 次、标准差约 3.54 次;摇 200 次期望 100 次、标准差约 7.07 次。所以「摇 50 次里肯定类只有 18 次」完全正常,不是工具出了问题——这正是随机波动的正常范围。
抽完不洗牌,每条独立。本页每次抽取都重新取一个随机数,不会把 20 条排成一列依次发完。原因是两种做法回答的是不同的问题:「独立抽取」对应「每次提问相互无关」,可以连着抽到同一条;「不重复发牌」对应「把 20 条用完再重来」,必然在 20 次内每条恰好出现一次。真实 8 号球是前者,所以本页也按前者实现——这也意味着连续两次得到同一条答案的概率就是 1/20 = 5%,并不罕见。
完整示例(数值仅作演示)
示例条件:问题填「我明天该带伞出门吗?」,一次摇 1 次。逐项对照:
- 答案池共 20 条,下标范围 0~19,
Math.floor(r × 20)最大值是 19,不会越界; - 随机源为
crypto.getRandomValues的 32 位整数,接受上限 4,294,967,280,丢弃区间只占16 / 4,294,967,296,接受率 99.9999996%; - 抽到肯定类的概率是
10 / 20 = 50.00%,模糊类与否定类各5 / 20 = 25.00%; - 抽到某一条指定答案的概率是
1 / 20 = 5.00%; - 连续两次摇出同一条答案是
1 / 20 = 5%;连续两次摇出两条指定答案(例如先Yes.再My reply is no.)是1 / 400 = 0.25%; - 摇 200 次时,某一条指定答案出现次数的期望是
200 / 20 = 10次。
把上面的例子落到页面上的话:如果这次抽到的是第 10 条 Signs point to yes.,页面会显示英文原句、中文释义「迹象指向『是』」、类别「肯定类(10/20 = 50.00%)」以及序号「第 10 条 / 共 20 条」。若接着把次数改成 3,可能会得到下面这样一组——注意第 2 条属于「模糊类」,它既不是同意也不是反对,而是明确请你稍后再问:
1. Signs point to yes. —— 迹象指向「是」。(肯定类) 2. Ask again later. —— 晚点再问吧。(模糊类) 3. Very doubtful. —— 很可疑。(否定类)
这里最值得留意的是「模糊类」占整整 25%。很多人的直觉是「球只给同意或反对」,于是把「晚点再问吧」也当成委婉的否定——这是对配比的误读。四分之一的结果本来就落在「说不准」这一档,它的存在是设计的一部分,不是工具答不出来。
二十条答案中英文对照表
下表按类别逐条列出 20 条答案的英文原句、中文对照与单条概率。默认显示前 12 行,点「加载更多」看全部 20 行;「复制对照表」按 TSV 复制,「导出 CSV」下载带 BOM 的表格文件。
| 序号 | 类别 | 英文原句 | 中文对照 | 单条概率 |
|---|---|---|---|---|
| 1 | 肯定 | It is certain. | 毫无疑问,就是这样。 | 5.00% |
| 2 | 肯定 | It is decidedly so. | 非常肯定。 | 5.00% |
| 3 | 肯定 | Without a doubt. | 毋庸置疑。 | 5.00% |
| 4 | 肯定 | Yes definitely. | 肯定是。 | 5.00% |
| 5 | 肯定 | You may rely on it. | 你可以放心。 | 5.00% |
| 6 | 肯定 | As I see it, yes. | 在我看来,是的。 | 5.00% |
| 7 | 肯定 | Most likely. | 很有可能。 | 5.00% |
| 8 | 肯定 | Outlook good. | 前景不错。 | 5.00% |
| 9 | 肯定 | Yes. | 是的。 | 5.00% |
| 10 | 肯定 | Signs point to yes. | 迹象指向「是」。 | 5.00% |
| 11 | 模糊 | Reply hazy, try again. | 答案模糊,再试一次。 | 5.00% |
| 12 | 模糊 | Ask again later. | 晚点再问吧。 | 5.00% |
| 13 | 模糊 | Better not tell you now. | 现在最好不说。 | 5.00% |
| 14 | 模糊 | Cannot predict now. | 现在无法预测。 | 5.00% |
| 15 | 模糊 | Concentrate and ask again. | 集中精神再问一次。 | 5.00% |
| 16 | 否定 | Don't count on it. | 别指望了。 | 5.00% |
| 17 | 否定 | My reply is no. | 我的回答是「不」。 | 5.00% |
| 18 | 否定 | My sources say no. | 我得到的信息是「不」。 | 5.00% |
| 19 | 否定 | Outlook not so good. | 前景不太妙。 | 5.00% |
| 20 | 否定 | Very doubtful. | 很可疑。 | 5.00% |
- 「单条概率」一列全是 5.00%:20 条答案地位完全平等,没有哪条比别的更容易出现。把 20 个 5% 相加正好是 100%。
- 按类别汇总:肯定类 10 条合计 50%、模糊类 5 条合计 25%、否定类 5 条合计 25%。如果你摇出来肯定类明显多于一半,那只是波动,不代表球有偏好。
- 序号 1~10 是肯定类、11~15 是模糊类、16~20 是否定类。这个顺序是历史沿用的排列,与抽取顺序无关——抽取时 20 条被一视同仁地从池里等概率取。
- 英文原句是固定文本,中文是逐条意译。做记录时建议保留英文原文,因为中文译法在「委婉程度」上很难完全对应,例如「Very doubtful.」直译更接近「非常可疑」,语气比「不太可能」要重。
概率、随机源与边界说明
- 「一次摇几次」限 1~50 的整数。0、负数、小数、字母、空值都会被拒绝并给出具体提示。上限取 50 是因为再多的记录读起来已经费力,而统计百分比在 50 次内的波动范围也较大;想更接近理论比例,建议分几轮各摇 50 次再合并观察,而不是把单次上限调高。
- 问题最多 80 字,且只留在浏览器里。输入框设置了 80 字符上限,超出无法继续输入。问题文本不会随任何请求发送出去,页面也不写本地存储,刷新即丢失——这既保护隐私,也意味着刷新后记录会一起消失,需要保留请先「复制问答」。
- 答案分布与问题内容完全无关。本页不会对问题做任何关键词匹配、情绪分析或长度加权。同一个问题连摇三次得到三个不同答案,是正常现象;想「问到满意为止」在数学上等价于反复抽样并挑出想要的结果,这不会改变任何一条答案的真实概率。
- 抽取是「独立放回」而不是「不重复发牌」。每条答案在每次抽取时的概率恒为 5%,摇过的不影响下一次。所以 20 次之内不一定每条都出现,出现重复也很正常;若某条答案连续出现两三次,只是 5% 事件连续发生了,不需要怀疑工具有问题。
- 批量记录的统计只是样本比例,不是概率本身。概率 50% 说的是「长期频率的极限」,而不是「摇 10 次必然有 5 次肯定」。摇 10 次时肯定类出现 3 次或 7 次都很常见,标准差约 1.58 次。
- 随机源依赖
crypto.getRandomValues。如果浏览器没有提供该接口(极老的版本或部分受限环境),本页会明确提示并停止抽取,而不是回退到质量较差的随机数悄悄给出结果。 - 本页不存储、不上传、不做任何统计上报。所有抽取、计数、导出都在当前页面完成,没有任何网络请求。想验证,可以在开发者工具的 Network 面板里边摇边看。
常见问题
摇出来的结果真的能预示什么吗?
不能。这 20 条答案是写死的固定文本,抽取过程与你的问题、时间、天气、心情没有任何关系,也不读取任何外部数据。「预示」需要因果关系或至少统计相关性,这里两样都没有。它唯一确定会做到的事,是给你一个未经权衡的外部理由。
为什么「不好也不坏」的答案占了整整四分之一?
因为 20 条答案里有 5 条属于模糊类(Reply hazy, try again. 到 Concentrate and ask again.),5 / 20 = 25%。这是原始 8 号球定下的配比,也让三类答案形成 10 : 5 : 5 的 2 : 1 : 1 结构。很多人只记住「是」和「否」,于是把模糊类当成委婉的否定,其实它明确表示「这一次没有倾向」。
连着摇到同一条答案,是不是程序卡住了?
不是。两次相邻抽取得到同一条答案的概率是 1 / 20 = 5%,也就是平均每 20 次会遇到一次;三次连着相同是 1 / 400 = 0.25%。在一个每天有大量访问的在线工具上,这样的巧合会被很多人遇到。本页每条答案独立抽取,不会因为刚出现过就降低它再次出现的概率。
「摇 10 次里肯定类出了 8 次」正常吗?
在随机范围内。肯定类概率是 0.5,摇 10 次时出现次数服从二项分布 B(10, 0.5),期望 5 次、标准差约 1.58 次,所以出现 8 次对应偏离期望约 1.9 个标准差,属于常见波动。要检验分布是否真的公平,需要把摇的次数累积到几百次以上,再看百分比是否收敛到 50% / 25% / 25%。
为什么不直接用 Math.random(),非要用 crypto?
两者都能用,但质量不同。Math.random() 是伪随机数发生器,规范只要求「近似均匀」,且它的 253 个等距值除以 20 会余 12,存在约 2.22×10−15 的取模偏差。本页要讲「严格等概率」,所以改用操作系统熵源驱动的 crypto.getRandomValues 加拒绝采样,把偏差压到零。代价只有一次几乎不会发生的重试。
可以把 8 号球用在需要认真决定的事情上吗?
不适合。它没有信息、没有推理、没有偏好,输出与你的实际情况无关。稳妥的用法是:先自己列清选项与后果,只把那些确实没有优劣差别的小事交给它——吃什么、先做哪件、走哪条路。凡是涉及健康、金钱、合同、他人利益的决定,都应该基于事实与专业意见,而不是一次随机抽取。
摇出来的记录会自动保存吗?下次打开还在吗?
不会保留。记录只存在当前页面的内存里,不写 localStorage 也不写 Cookie,刷新、关闭标签页或重新打开都会清空。需要留档请在离开前点「复制问答」或「导出 CSV」。这样设计是为了避免你的提问内容被意外留在设备上。
导出的 CSV 中文为什么能正常显示?
因为导出时在文件开头写入了 UTF-8 BOM(字节 EF BB BF),Excel 读到它就会按 UTF-8 解析,不会把中文显示成乱码。也正因如此本页只导出 CSV 与 TSV 两种文本格式;如果导出 JSON,反而不能带 BOM,因为 JSON 规范不允许文件开头出现该字节,否则解析器会直接报错。