正の分数のエンゲル展開計算機
このエンゲル展開計算機は、任意の正の有理数を積の逆数の和として正確に表します。4/13のような分数を入力すると、単調非減少のエンゲル分母列、対応する単位分数の各項、既約化した入力が返されます。計算はすべて整数演算で行うため、循環小数への近似や浮動小数点の丸めによって結果が変わることはありません。数論の学習、解答例の作成、記号計算の確認、再現可能なソフトウェアテストなど、標準的で安定した展開が必要な場面に適しています。
無料で実行
エンゲル展開が表すもの
エンゲル展開は、正の実数を、分母が累積積となる項の和で表す方法です。返された列がa1、a2、a3なら、値は1/a1 + 1/(a1 a2) + 1/(a1 a2 a3)となり、それ以降も同じ規則で続きます。正の有理数を入力した場合、この手順は必ず終了するため、計算機は有限の列と有限の式を返します。分母は単調非減少であり、この順序条件が表現の特徴です。通常のエジプト分数分解も単位分数を使いますが、エンゲル展開では新しい各項が、それまでに選んだすべての分母の積によって決まる点が異なります。出力には、数式処理やプログラムで扱いやすい分母列と、値を目で確認しやすい積の逆数による展開式の両方が含まれます。入力は最初に既約化されるため、8/26と4/13のように等しい分数からは、同じ正規化済み分数と同じ展開が得られます。
正確なアルゴリズムの仕組み
計算では、現在の正の有理数をp/qとし、次の分母としてq/pの天井値を選びます。この選択には整数除算を使い、分数を小数へ変換しません。次にエンゲルの漸化式に従い、pをaとpの積からqを引いた値に置き換え、qを維持し、得られた分数を最大公約数で約分します。新しい分子が0になれば展開は完了し、0でなければ同じ処理を繰り返します。分子、分母、天井値、積、約分はすべて任意精度整数で処理されるため、JavaScriptで安全に扱える整数範囲を超えても答えは正確です。不正な文字列、0、負の値、分母0は、意味を推測せずエラーとして返します。また、安定した実行時間を保つため、入力桁数と展開の項数には上限があります。これらの規則により、同じ有効な分数からはブラウザーでもAPIでも常に同一の数学的結果が得られます。
結果の読み方と活用方法
標準的なエンゲル列が必要な場合は、まず分母のフィールドをご覧ください。各要素は文字列です。これは、すべての整数を安全な数値として保持できないJSON環境でも、非常に大きな整数を正確に保つためです。長さのフィールドは分母の個数、すなわち単位分数の項数を示します。展開式のフィールドでは、選ばれた分母を順に掛け合わせて各逆数を表示するため、有理数演算を使って和を独立に検算できます。学習では、各分母を天井値の規則と照合し、手順ごとの残差を求めると理解しやすくなります。ソフトウェアテストでは、正規化済み分数と分母配列を安定した期待値として利用し、未約分でも等価な入力を加えて正規化も確認できます。本機能は正の分数専用であり、無理小数の無限展開、帯分数の解釈、浮動小数点値の近似は行いません。APIの各リクエストは$0.002です。ブラウザー版とAPI版は同じ純粋な計算処理を共有しています。
活用例
数論の演習を検算する
手計算で求めたエンゲル分母列を正確な結果と比較し、累積積からできる各項を確認できます。
決定的なテストベクトルを作る
浮動小数点近似に依存せず、有理数演算ライブラリ向けの安定した期待値を生成できます。
有理数の表現を説明する
天井値を使う漸化式が正の分数を順序付きの積による和へ変換する過程を示せます。
よくある質問
どの入力形式を使用できますか?
4/13のように、正の10進整数2個をスラッシュで区切ってください。前後の空白と任意のプラス記号も使用できます。
0や負の分数を入力できますか?
できません。分子または分母が正でない場合は、無効な入力としてエラーになります。
分母が文字列で返されるのはなぜですか?
結果をJSONに変換する際も、任意精度の非常に大きな整数を失わず正確に保持するためです。
エジプト分数展開と同じものですか?
完全には同じではありません。エンゲル展開の各分母は単調非減少列の累積積から作られ、追加の構造条件があります。
小数による近似を使いますか?
使いません。解析、天井値、最大公約数による約分、積のすべてを正確な整数演算で処理します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/engel-expansion \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"fraction":"4/13"}'const res = await fetch("https://api.kit.forhosting.com/numth/engel-expansion", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"fraction": "4/13"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/engel-expansion",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"fraction": "4/13"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/engel-expansion", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"fraction":"4/13"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"fraction":"4/13"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/engel-expansion", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"fraction": "4/13"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.engel_expansion",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |