~整数演算で作る π の近似値 333/106 と 355/113~
■ なんちゃって円周率とは
PLC で 分岐なし・ループなし・純算術だけ で
「円周率っぽい値」を作る遊び心のある手法。
新人でも読めて、現場でも動く “なんちゃってシリーズ” の算術編。
■ 第1号案:割り算だけで π に寄せるやつ
今回使う式はこれ。
$$
\pi = 3 + \frac{1}{7 + \frac{1}{15}}
$$
※ この 333/106 は、π の連分数展開の途中で現れる近似値です。
ポイントは 割り算を二段重ねるだけで 3.1415… に寄る という不思議さ。
• 15 で割る
• その結果に 7 を足す
• さらに 1 を割る
• 最後に 3 を足す
これだけで “円周率っぽい値” が出る。
$$
7 + \frac{1}{15} = \frac{106}{15}
$$
$$
\frac{1}{7 + \frac{1}{15}} = \frac{15}{106}
$$
$$
3 + \frac{15}{106} = \frac{333}{106}
$$
$$
\pi_{\text{NT1}} = \frac{333}{106}
$$
実際のコードでは…
$$
\text{PI_x10000} = \frac{33300}{106}
$$
• PI_x10000は「πを10000倍した整数」という意味
• 実際の値は 31415くらいになる
• 表示するときに「小数点を4桁戻す」だけ
• そのまま割ると小数が落ちるので、先に分子を10倍・100倍しておく
• PLC ではこれを 固定小数点っぽく扱うテク としてよくやる
• 欲しい桁数
• オーバーフローしない範囲
この2つで決める
演算時注意点
キーエンスでは
LDA DM0
EXT
DIV DM2
↑の様に除算の前に [EXT] 命令を使って被除数を TM へ拡張する必要があります。
乗算後は TM が自動で拡張されるので [EXT] 命令は不要です。
LDA DM0
MUL #333
DIV #106
↑こんな感じ
■ 第2号案:355/113(世界的なんちゃって代表)
$$
\pi \approx \frac{355}{113}
$$
これは 分母113で小数点以下6桁合う という異常精度の分数。
偶然ではなく、円周率の 連分数展開 から必然的に出てくる名作。
• π の連分数には巨大な係数(292)が出てくる
• その直前の近似値(355/113)が爆発的に精度を上げる
PLC では DIV 一発 で出せるのが気持ちいい。
■ なんちゃって円周率の現場メリット(オーバーフローに強い)
なんちゃって円周率(355/113 みたいな「分数の π」)の良さは、
「πをそこそこ正確に近似できる」だけじゃない。
いちばん現場的なメリットは、
• 全部整数演算で書けるので、オーバーフローに強い
ここに尽きます。
● 通常の π(3.141592…)をそのまま使うと
PLC で素直に π を使おうとすると:
• REAL(浮動小数点)が必要
• スケーリングが必要(×1000 とか ×10000 とか)
• 乗算を重ねると桁落ち・誤差が蓄積
• 型変換の地雷(INT⇔REAL)
• 値が膨らんでオーバーフローしやすい
「とりあえず REAL で書いたら動いたけど、
なんかたまに変な値になる…」みたいなやつの原因になりがちです。
● なんちゃって円周率は「分数」なので、そのまま整数で書ける
ラジアン変換:
Rad = π × Deg / 180
これを 355/113 に置き換えると:
Rad = (355 * Deg) / (113 * 180)
全部 INT/DINT のまま書けます。REAL 不要。
しかも、
- 分母 113×180 がそこそこ大きい
→ 計算結果が「自然に縮む」
→ 値が暴れにくく、オーバーフローしにくい
というオマケ付きです。
■ まとめ
• 第1号案:割り算だけで π に寄せる “なんちゃって感MAX”
• 355/113:歴史的名作、DIV一発で高精度
• どっちも 純算術、どっちも PLCで即動く
なんちゃって円周率は、
「精度そこそこ」+「オーバーフローに強い」
= “現場でちょうどいい π” を、整数だけで作るための技術や、
という話を、ここにそっと置いておきます。
この記事が、必要な人へ。
困っている人に、届きますように。
▼ 関連記事(なんちゃってシリーズ)
• なんちゃって四捨五入(KV編)
https://qiita.com/yenqoo/items/41af6dd6a2f3ab4240e2
▼ 人気記事
• キーエンスPLCで信号灯を“グラデーション点滅”させる方法
https://qiita.com/yenqoo/items/9a2509b26e415a87a39c
作者
圓空(えんくう)
https://yenqoo.com/spices/
https://yenqoo.com/monologue/
キーエンスPLCを中心に、
“技術 × 美学 × 遊び心” をテーマにした技術文化を発信しています。