1回のロール、9,999の結果
Diceはサイト上で最もシンプルなゲームです。ターゲットを選び、UnderまたはOverを選べば、ロール結果がそのサイドに着地するかしないかです。画面には各ターゲットの勝率と倍率が表示され、この2つを掛けると正確に99%になるように見えます。つまり、ステーク額の返却からハウスエッジ1%を差し引いた額です。しかし、エンジンはもう少し細かく動作しており、プレイヤーに不利な2つの方法があります。この記事ではそれらを正確に計算します。
ENGINE-VERIFIEDOriginalBaseDiceService.kt: getResult()はnextIntBelow(9999) + 1を描画し、100で除算するため、結果は0.01から99.99までの9,999の値の1つです。0.00は除外され、99.99が含まれます。getWinChance()はUnderの場合はtarget ÷ 100、Overの場合は(100 − target) ÷ 100です。checkAndGetMultiplier()は(1 − house edge) ÷ win chanceであり、2小数点までフロアリングされます。getEarned()は厳密に比較します。Underは結果がターゲット未満のときに勝ち、Overはターゲットより上のときに勝ちます。乱数はサーバーシードをキーとしたHMAC-SHA256の最初の13進数で、「clientSeed-nonce-0」に対して計算され、2⁵²で除算されます。クライアントミラーはdice/diceApi.tsのpayoutMultiplier()であり、diceGame.tsxはスライダーをターゲット2.00~98.00に制限します。
ハウスサービスはこの計算の独自のテストであるDiceHouseEdgeTestを実行しており、どのターゲットも99%を超えて返されないことと、フロアが1回のラウンドステップ以上を行わないことをチェックします。両方とも成立します。このテストが出力しないのは、各ターゲットが実際にどの程度返されるかであり、それがプレイヤーが必要とするテーブルです。
表示された勝率と真の勝率
画面に表示される勝率は、ロールが0から100の連続数であるかのように計算されます。しかし、そうではなく、9,999のステップの1つです。ターゲットTの下にロールするとき、結果0.01からT − 0.01までで勝つため、それは100 × T − 1のうちの1つです。したがって、真の勝率は(100T − 1) ÷ 9,999です。ほとんどのターゲットでは差は目に見えませんが、最小のターゲットではそうではありません。
| ターゲット(UNDER) | 9,999の勝利結果 | 表示勝率 | 真の勝率 |
|---|---|---|---|
| 2.00 | 199 | 2.00% | 1.9902% |
| 5.00 | 499 | 5.00% | 4.9905% |
| 10.00 | 999 | 10.00% | 9.9910% |
| 25.00 | 2,499 | 25.00% | 24.9925% |
| 50.00 | 4,999 | 50.00% | 49.9950% |
| 75.00 | 7,499 | 75.00% | 74.9975% |
| 90.00 | 8,999 | 90.00% | 89.9990% |
| 98.00 | 9,799 | 98.00% | 97.9998% |
真の確率 = (100 × ターゲット − 1) ÷ 9,999。ターゲット T を超えてロールするとは 9,999 − 100T の結果で勝利することを意味し、Over T は Under (100 − T) とまったく同じ価格です: Over 50 も 4,999 の結果で勝ちます。
ギャップは常に 1 つの結果です。50% のターゲットでは確率の 0.005 パーセント ポイント、リターンの 100 分の 1% かかります。スライダーが許す最も厳しい 2% のターゲットでは、200 に 1 つの結果は勝つ確率の約 0.5% であり、このためだけにリターンは 99.00% から 98.51% に低下します。同じ事実は小さな好奇心を説明します: 正確に 50.00 のロールは Under 50 と Over 50 の両方で負けます。ターゲットは比較に含まれないからです。これは 9,999 ロールに 1 回起こります。
小数点第 2 位のフロア
2 番目のコストは乗数です。エンジンは 0.99 を勝つ確率で割り、小数点以下 2 桁を保ち、常に切り捨てます。除算が正確に出た場合 — 0.99 ÷ 0.50 = 1.98、0.99 ÷ 0.25 = 3.96 — 何も失われません。そうでない場合、プレイヤーには切り詰められた数字が支払われます: 0.99 ÷ 0.80 = 1.2375、×1.23 として支払われます。勝つ確率が高い場合、乗数は 1 に近く、ドロップされる 100 分の 1 は利益の大きな割合であり、リターンは低い方よりも大幅に低下します。
| ターゲット (アンダー) | 支払い | 表示確率 × 支払い | 真のリターン |
|---|---|---|---|
| 2.00 | ×49.50 | 99.00% | 98.51% |
| 5.00 | ×19.80 | 99.00% | 98.81% |
| 7.00 | ×14.14 | 98.98% | 98.85% |
| 10.00 | ×9.90 | 99.00% | 98.91% |
| 13.00 | ×7.61 | 98.93% | 98.86% |
| 25.00 | ×3.96 | 99.00% | 98.97% |
| 40.00 | ×2.47 | 98.80% | 98.79% |
| 50.00 | ×1.98 | 99.00% | 98.99% |
| 70.00 | ×1.41 | 98.70% | 98.70% |
| 80.00 | ×1.23 | 98.40% | 98.40% |
| 90.00 | ×1.10 | 99.00% | 99.00% |
| 95.00 | ×1.04 | 98.80% | 98.80% |
| 97.06 | ×1.01 | 98.03% | 98.03% |
| 98.00 | ×1.01 | 98.98% | 98.98% |
True return = multiplier × (100 × target − 1) ÷ 9,999. At 90.00 it is 98.999%, the highest on the slider; at 97.06 it is 98.030%, the lowest. Over targets mirror these rows: Over T returns what Under (100 − T) returns.
Read the two right-hand columns together and the two costs separate cleanly. At low targets the multiplier usually divides exactly and the whole shortfall is the missing result; at high targets the missing result is negligible and the shortfall is almost all floor. Target 80 is the clearest case: 0.99 ÷ 0.8 needs ×1.2375, the table pays ×1.23, and the return is 98.40% — a house edge of 1.6%, not 1%. Every target between 97.06 and 98.00 pays the same ×1.01, so the chance you give up by moving to 97.06 buys nothing.
Over the whole slider — every target from 2.00 to 98.00 in steps of 0.01, 9,601 settings — the true return averages 98.72%. Only 585 of those settings, 6.1%, return 98.95% or more; 1,453, 15.1%, return less than 98.50%.
マルチプライアーを入力してください、パーセンテージではなく
ゲームには賭けを設定する2番目の方法があります:希望するマルチプライアーを入力すると、ターゲットが計算されます。入力したマルチプライアー以上のフロア支払いを持つターゲットを選択するため、入力されたマルチプライアーは常に0.99 ÷ chanceがきれいに分割される設定に着地します。これによりフロアコストが完全に削除されます。1つの結果ギャップだけが残ります。
| 入力済み | ターゲット(アンダー) | 真の確率 | 真のリターン |
|---|---|---|---|
| ×1.10 | 90.00 | 89.9990% | 99.00% |
| ×1.20 | 82.50 | 82.4982% | 99.00% |
| ×1.50 | 66.00 | 65.9966% | 98.99% |
| ×2 | 49.50 | 49.4949% | 98.99% |
| ×3 | 33.00 | 32.9933% | 98.98% |
| ×5 | 19.80 | 19.7920% | 98.96% |
| ×10 | 9.90 | 9.8910% | 98.91% |
| ×20 | 4.95 | 4.9405% | 98.81% |
| ×49.50 | 2.00 | 1.9902% | 98.51% |
targetForMultiplier() in dice/diceApi.ts は Under のターゲット (または Over のターゲットを切り上げ) をフロアしますので、チャンスは入力された乗数が暗示するものを上回ることはありません。小数点以下2桁に丸められて返されます。×1.10 は 98.999% で ×1.20 は 98.998% です。
実践的なルールはシンプルです。小数点以下の最後の半ポイントについて気にするなら、パーセンテージではなく乗数を設定し、ペイアウトレンジの低端で丸い乗数を選びましょう。パーセンテージとして丸く見えるから選ばれたターゲット — 80、70、40 — は、1ティック離れたターゲットより悪い価格であることが多いです。これは長期的な方向性を何も変えません。すべての設定は賭け金より少なく返され、マルチンゲール法、価格と破産のリスクが、どのような賭けのシーケンスもそれを修正できない理由を説明しています。
Limbo は構造上フロアを回避します。プレイヤーがペイアウトを直接指定し、引かれた数字は同じ数字と比較されますので、支払うための2番目の丸めはありません。Dice は確率を引用し、そこからペイアウトを導出し、その導出がフロアが入る場所です。
ロールを自分で確認する
- プレイする前に、フェアネスパネルはサーバーシードの SHA-256 フィンガープリントを表示します。その後シードペアを回転させてシードを明かし、フィンガープリントを確認してください。
- HMAC-SHA256 をサーバーシードをキーとして、"clientSeed-nonce-0" をメッセージとして計算します。ロールはカーソル 0 のみを使用します。
- ダイジェストの最初の13の16進数字を整数として読み込み、2⁵²で割ってuを求めます。結果は(floor(u × 9,999) + 1) ÷ 100です。これをターゲットと厳密に比較し、チケットの乗数を0.99 ÷ チャンスと小数第2位までの切り下げで比較します。
結果が一致した場合、それはあなたがターゲットを選択する前に決定されていました — ハッシュコミットメントが何を証明するかで説明されているように、これがコミットメントが保証する唯一のものです。ターゲットの価格はハッシュに含まれていません。これは上記の2行の算術に含まれているため、この記事が存在するのです。
FAQ
0から100までのロールを行うサイコロゲームの実際のオッズは何ですか?
ここでロールは0.01から99.99までの9,999の結果の1つです。T未満のロールは、そのうちの100 × T − 1でウィンするため、50未満のロールは49.995%、10未満のロールは9.991%、2未満のロールは1.990%です。
サイコロのハウスエッジは何ですか?
表示されているエッジは1%ですが、実際のリターンはターゲットに依存します:ターゲット90で99.00%から97.06で98.03%です。スライダー設定2.00から98.00の全体で平均化すると98.72%で、実効エッジは1.28%です。
サイコロの乗数が切り下げられて見えるのはなぜですか?
エンジンは0.99 ÷ ウィンチャンスを小数第2位まで切り下げて支払います。80%のターゲットでは1.2375で、×1.23で支払われ、99%ではなく98.40%をリターンします。
サイコロで選ぶのに最適なターゲットは何ですか?
0.99 ÷ チャンスが正確に割り切れるターゲット、例えば50(×1.98)、25(×3.96)、90(×1.10)、66(×1.50)など。乗数をパーセンテージの代わりに入力することで、自動的に1つを見つけます。99%を超えるリターンをもたらすターゲットはありません。
サイコロのロールが正確にターゲットに着地した場合はどうなりますか?
ロスになります。Underはターゲット未満の場合のみウィンし、Overはターゲット超の場合のみウィンするため、正確に50.00のロールはUnder 50とOver 50の両方でロスします。これは9,999ロールに1回起こります。
サイコロのロールを検証できますか?
はい。「clientSeed-nonce-0」のHMAC-SHA256をリビールされたサーバーシードでキー指定し、最初の13の16進数字を2⁵²で割ることでuを得、(floor(u × 9,999) + 1) ÷ 100が結果になります。
ソースと参照
- Betkyo エンジンソース、ハウスサービス:OriginalBaseDiceService.kt — getResult()(nextIntBelow(9999) + 1、100超)、getWinChance()(4進数切り下げ)、checkAndGetMultiplier()((1 − ハウスエッジ) ÷ ウィンチャンス、2進数切り下げ)、getEarned()(厳密比較);SeedPairRandomとPfHashUtils.normalize()(最初の13の16進数字 ÷ 2⁵²);DiceHouseEdgeTest.kt
- Betkyo エンジンソース、クライアントミラー:dice/diceApi.tsのpayoutMultiplier()とtargetForMultiplier();diceGame.tsxの2.00–98.00スライダー範囲
- この記事のために書かれた正確な計算:9,601のスライダーターゲットすべてについて(100T − 1) ÷ 9,999のウィンチャンスと切り下げられた乗数、それらの真のリターンと分布;400,000のHMACストリームのロールを結果導出を通して再生することで相互検証(50未満のロール:シミュレーション49.88%対正確49.995%;結果は0.01から99.99までの範囲)
この記事のゲーム