平衡三進数変換ツール:-1・0・1で整数を表現
20は平衡三進法で1 −1 1 −1と書けます。3の3乗から3の2乗を引き、3を足して1を引くと20です。負の数を含む任意の整数を入力すると、符号付きの数字による形が見やすく区切って表示されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 20
- 平衡三進法
- 1 -1 1 -1
- 桁
- 1, -1, 1, -1
平衡三進数変換ツールは、整数を基数3とし、マイナス1・0・1の数字だけで表します。正の整数、負の整数、またはゼロを入力すると、空白で区切った読みやすい表記と数値の数字配列を返します。空白があるため、結果をノート、コード、計算式へコピーしても、各-1を明確に判別できます。変換には整数演算だけを使い、結果は正確かつ決定的です。符号付き数字体系の学習、演習問題の確認、小規模なテストベクトルの作成に役立ち、手作業で除算を繰り返す必要がありません。
平衡三進数が表すもの
通常の三進数は0・1・2を使い、各桁には3の累乗に対応する位の値があります。平衡三進数では2を-1に置き換え、使用する数字を-1・0・1とします。それぞれの数字が各桁の3の累乗に掛かる点は同じですが、負の数字はその位の値を減算します。
表示される並びは一般的な十進表記と同様に、最も大きい累乗から一の位へ向かいます。-1というトークンが1桁を占めるため、このツールでは誤読しやすい連結文字列にせず、数字を空白で区切ります。数字配列には同じ情報が、プログラムで直接扱える形で収録されます。先頭の不要なゼロを除けば、すべての整数には有限で一意な平衡三進表現があります。
そのため、正数にも負数にも別の符号文字は不要です。符号は各数字そのものに含まれています。この性質によって表現はゼロを中心に対称となり、ある整数とその反数を比較しやすくなります。
変換アルゴリズムの仕組み
この変換では、現在の整数を3で繰り返し割り、余りを調べます。余りが0または1なら、すでに使用可能な平衡数字なので、そのまま記録します。余りが2なら-1へ置き換え、次の桁へ1を繰り上げます。
2は、マイナス1に3のまとまりを1つ加えた値と等しいためです。JavaScriptでは負の被除数から負の余りが生じるため、対称となる場合も処理します。余りが-2なら1へ変え、次の商から1を引きます。
数字は一の位から上位へ順番に見つかるので、最後に並びを反転して通常の読み順にします。調整後の商がゼロになるまでループを続けます。この手順は近似、外部サービス、乱数、時刻を一切使いません。
入力は安全な整数である必要があります。そのような値を拒否することで、正しそうに見えて実際には誤った数字列を返す事態を防ぎます。
結果の読み方、検算方法、活用方法
結果を検算するには、最も右の数字を3の0乗の位として始め、各数字に対応する位置の3の累乗を掛け、符号を保ったまますべての項を加算します。合計は元の整数と一致する必要があります。トークンは1個の空白で区切られ、各トークンは必ず-1・0・1のいずれかです。
元の`n`も返すため、ログや一括処理の結果だけを見ても入力を特定できます。ゼロだけは表示上の特別な場合であり、空の並びではなく1個のゼロを返します。簡単な確認、授業、単独の計算にはブラウザー版をご利用ください。
活用例
記数法の演習を確認
指定された十進整数を変換し、符号付き数字を手計算による反復除算の解答と比較できます。
決定的なテストベクトルを作成
算術、符号化、学習用ソフトウェアの単体テストに使える正確な平衡三進数字配列を生成します。
対称な表現を調査
正と負の整数を比較し、別の符号接頭辞なしで符号付き数字が反数を表す仕組みを確認できます。
よくある質問
数字を空白で区切るのはなぜですか?
-1が1個の数字であることを明確にし、マイナス記号を数全体の符号と混同しないようにするためです。
負の整数も変換できますか?
はい。 負の値は符号付き数字で直接表されるため、先頭に別の符号を追加する必要はありません。
平衡三進法の結果を手で確かめるには?
右端の一の位から始め、各桁の数字に対応する3のべき乗を掛けて、符号付きの値を足します。1 −1 1 −1なら3の3乗から3の2乗を引き、3を足して1を引くので20になります。
普通の3進法とどう違いますか?
普通の3進法は0、1、2を使いますが、平衡三進法は2の代わりに−1を使い、次の位に1を繰り上げます。そのため符号が数字の中に含まれ、別にマイナス記号を付ける必要がありません。
どの数字を使いますか?
使う数字は−1、0、1の3つだけです。各位は3のべき乗の重みを持ち、−1の桁はその位の値を引く働きをします。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/balanced-ternary \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":20}'const res = await fetch("https://api.kit.forhosting.com/numth/balanced-ternary", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/balanced-ternary",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/balanced-ternary", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/balanced-ternary", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 20
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.balanced_ternary",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
変換アルゴリズムの仕組み
範囲を超えるJSON数値は、変換開始前にすでに精度を失っている可能性があるからです。
結果の読み方、検算方法、活用方法
`balanced_ternary`フィールドは人が読むための表記です。`digits`フィールドはソフトウェア向けで、同じ値を最上位から最下位の順にJSON整数として並べます。フィクスチャの生成、別実装の検証、決定的な処理への組み込みには、1リクエスト$0.002のAPIをご利用いただけます。小数、数字の文字列、無限大、安全範囲外の整数は、丸めたり暗黙変換したりせず`invalid_input`エラーになります。
技術的な質問
平衡三進数ではどの数字を使いますか?
-1・0・1を使います。各桁の位の値は3の累乗です。
非常に大きい整数が拒否されるのはなぜですか?
JavaScriptの安全範囲を超えるJSON数値は変換前に丸められる可能性があります。拒否することで結果の正確性を守ります。
APIによる変換の料金はいくらですか?
APIは1リクエスト$0.002です。このページのブラウザー版は無料でご利用いただけます。