1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

~整数演算で作る π の近似値 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を中心に、
“技術 × 美学 × 遊び心” をテーマにした技術文化を発信しています。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?