サイコロ合計が指定値以下になる確率計算
この計算機は、同じ種類の公平なサイコロを複数振ったとき、合計が指定値以下になる累積確率を求めます。無作為な試行で近似するのではなく、起こり得るすべての結果を正確な整数演算で数えます。サイコロの個数、各サイコロの面数、上限値を入力してください。有利な結果数、全結果数、既約分数、小数確率、百分率を返すため、ゲーム設計、確率の学習、再現性が必要なルールエンジンに利用できます。
無料で実行
計算対象となる事象の意味
「以下」という条件には、指定した上限値そのものと、それより小さい合計がすべて含まれます。たとえば6面サイコロを2個振り、上限を7にした場合はP(合計 ≤ 7)を求めます。このとき2、3、4、5、6、7が有利な合計です。「ちょうど7」では7だけが対象となり、「7以上」では7から12までが対象となるため、意味が異なります。各サイコロは公平かつ独立で、面には1から指定した面数までの連続する整数が記されているものとします。n個のs面サイコロには、等確率の順序付き結果がs^n通りあります。計算機は最小合計から上限値までに入る結果を数え、その数を標本空間全体の大きさで割ります。上限値が最小合計より小さければ確率0、最大合計以上なら確率1を正しく返します。これらはエラーではなく、累積分布の正当な境界値です。そのため、別のルールが動的に作った上限値もそのまま処理できます。
正確な累積数え上げの仕組み
計算には乱数試行ではなく、処理範囲を制限した動的計画法を使います。サイコロをまだ振っていない時点で、合計0を作る方法が1通りある状態から始めます。サイコロを1個追加するたびに、すでに到達できる各合計へ許可されたすべての目を加え、次の数え上げ表を作ります。スライディングウィンドウで寄与を効率よく合計し、任意精度整数を使うため、大きな結果数も丸めません。すべてのサイコロを処理した後、選択した上限以下にある合計の件数を加算します。全結果数は、面数をサイコロ個数乗して別に算出します。最大公約数で有利な結果数と全結果数の比を最簡分数にし、決定的な整数除算で読みやすい小数と百分率も作ります。同じ入力には毎回同じ答えが返り、Monte Carlo法の標本誤差はありません。長いシミュレーションでもまれな裾を見落としたり実行ごとに変動したりしますが、正確な漸化式では起こりません。公開上限によりメモリと時間を抑えつつ、一般的な多面体サイコロと大きな独自プールを扱えます。
ゲーム、授業、ソフトウェアでの活用
diceには同じサイコロの個数、sidesには各サイコロの面数、at_mostには含めて判定する上限値を指定します。厳密な有理数が必要ならprobability_fraction、短い小数ならprobability、表示用の百分率ならprobability_percentをご覧ください。favorable_outcomesとtotal_outcomesは元の件数を示し、大きな整数をJSON利用側で失わないよう文字列で返します。ゲーム設計では、ダイスプールが上限以下に収まる頻度、低い出目で条件が発動する確率、公開前に調整するしきい値を比較できます。授業では累積分布を説明し、正確な答えと実験的なシミュレーションを比べられます。開発者は決定的な応答をテストに固定したり、確率表を保守せずに得点サービスから呼び出したりできます。ブラウザー版も同じ純粋関数を端末内で実行します。自動化したAPIで正常に処理された1件の料金は$0.002です。重み付き、爆発、振り直し、異なる面数の混在には対応しません。これらは標本空間を変えるため、別のモデルが必要です。
活用例
低い出目で発動するルールの調整
卓上ゲームのルールを確定する前に、ダイスプールが発動値以下になる正確な確率を確認できます。
累積確率の教材
選択した上限値を含め、それ以下の各合計について有利な結果数がどのように積み上がるかを示せます。
決定的なルールエンジンの試験
公平な通常サイコロの上限判定を行うソフトウェアで、安定した分数と件数をテストデータとして使えます。
よくある質問
「以下」には指定した値も含まれますか?
はい。上限値以下という意味なので、指定した合計も有利な結果に含まれます。
結果は正確ですか、それともシミュレーションですか?
正確な結果です。任意精度整数で全結果を数え、乱数や標本抽出は使いません。
どのようなサイコロを前提にしていますか?
同じ種類で互いに独立した公平なサイコロを前提とし、各面は1から選択した面数まで連番です。
到達できない上限値を指定するとどうなりますか?
最小合計より小さければ確率0、最大合計以上であれば確率1を返します。
APIによる計算の料金はいくらですか?
APIで正常に処理された1件の料金は$0.002です。同じ決定的な計算をブラウザーでも利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/hobby/game-dice-sum-at-most \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dice":2,"sides":6,"at_most":7}'const res = await fetch("https://api.kit.forhosting.com/hobby/game-dice-sum-at-most", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dice": 2,
"sides": 6,
"at_most": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/game-dice-sum-at-most",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dice": 2,
"sides": 6,
"at_most": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/game-dice-sum-at-most", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dice":2,"sides":6,"at_most":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dice":2,"sides":6,"at_most":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/game-dice-sum-at-most", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"dice": 2,
"sides": 6,
"at_most": 7
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.game_dice_sum_at_most",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_dice | 50 |
max_sides | 100 |
max_sum | 5000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |