魔法8球

把 20 条经典答案放进一只虚拟的 8 号球里,每次提问等概率抽出一条。肯定、模糊、否定三组各占 10、5、5 条,页面上给出完整中英文对照表、各类概率与拒绝采样的取数原理。

Signs point to yes.
迹象指向「是」 —— 第 10 条 / 共 20 条
肯定类(10/20 = 50.00%)
说明:结果只是从固定的 20 条答案里等概率抽取,与问题内容无关,也不含任何预测或判断能力。它适合用来打破「两个选项反复纠结」的僵局,不适合用来做任何有实际后果的决定。

提示:在「你的问题」或「一次摇几次」输入框里按 Enter 可以直接摇一次;写下的问题只留在浏览器内存里,刷新页面即清空。

使用方法

  1. 先在「你的问题」里写下要问的事,最多 80 字,例如「我明天该带伞出门吗?」。这一栏可以留空——留空时球照常出答案,只是记录里不显示问题,方便你只想要一个随机结果。
  2. 在「一次摇几次」里填 1(示例值),允许 1~50 的整数。填 1 就是经典用法:一次提问出一次答案;填 10 会连续抽出 10 条,用来直观感受答案池的分布,而不是「问 10 次更好」。
  3. 点「摇一摇」,或直接在输入框里按 Enter。球面区域会立刻换成新答案,下方同步显示英文原句、中文释义、所属类别与这条答案在池里的序号。
  4. 每次抽取都会追加到下方的问答记录里,并实时统计三类答案各出现几次、占比多少。记录只存在当前页面,刷新即清空。
  5. 「复制问答」把记录按纯文本复制,方便贴到聊天窗口;「复制对照表」把 20 条答案的对照表按 TSV 复制;「导出 CSV」下载带 BOM 的表格文件,用 Excel 打开中文不乱码。
  6. 「载入示例」把问题和次数恢复成默认值并重新摇一次;「清空记录」只清空历史与统计,不影响当前这条答案。

这个魔法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 次。逐项对照:

把上面的例子落到页面上的话:如果这次抽到的是第 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%

怎么读这张表
  • 「单条概率」一列全是 5.00%:20 条答案地位完全平等,没有哪条比别的更容易出现。把 20 个 5% 相加正好是 100%。
  • 按类别汇总:肯定类 10 条合计 50%、模糊类 5 条合计 25%、否定类 5 条合计 25%。如果你摇出来肯定类明显多于一半,那只是波动,不代表球有偏好。
  • 序号 1~10 是肯定类、11~15 是模糊类、16~20 是否定类。这个顺序是历史沿用的排列,与抽取顺序无关——抽取时 20 条被一视同仁地从池里等概率取。
  • 英文原句是固定文本,中文是逐条意译。做记录时建议保留英文原文,因为中文译法在「委婉程度」上很难完全对应,例如「Very doubtful.」直译更接近「非常可疑」,语气比「不太可能」要重。

概率、随机源与边界说明

常见问题

摇出来的结果真的能预示什么吗?

不能。这 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 规范不允许文件开头出现该字节,否则解析器会直接报错。

相关工具