2025-02-17
IoTなど組み込みコンピューターは安さが命。機能を最小限に絞った環境では、浮動小数のハードウェア実装がないものもあります。

プログラミング言語レベルでも浮動小数をサポートしない環境で小数を使いたい場合は、ソフトウェア的になんとかすることになります。

緯度経度精度を文字列化するGeo3x3IchigoJam BASIC実装はまさにそれ。配列を使って多桁演算を実装し、エンコードとデコードを実装しました。(参考、50言語目のGeo3x3実装はIchigoJam BASIC! 固定小数計算ライブラリと伝説の言語COBOL)

この実装を元に浮動小数を使わないGeo3x3を構造化プログラミング言語「Wirth」へ移植しました。

手続き型言語 IchigoJam BASIC での多桁演算の引き算

150 @SUB:FORI=N-1TO0STEP-1:IF[A+I]<[B+I]&&I>0[A+I-1]=[A+I-1]-1:[A+I]=[A+I]+10 170 [C+I]=[A+I]-[B+I]:NEXT:RTN

これを Wirth で記述します

function sub(a, b, c) n <- a.length for i <- n - 1 to 0 step -1 if a[i] < b[i] and i > 0 a[i - 1] <- a[i - 1] - 1 a[i] <- a[i] + 10 endif c[i] = a[i] - b[i] next end

記述量は長くなりますが、構造化され見通しは良いですね。
これが構造化プログラミング言語の良いところ!


「Geo3x3_encode without float - Wirth Playground」

緯度(lat)経度(lng)精度(level)から、Geo3x3文字列を生成します。


「Geo3x3_decode without float - Wirth Playground」

Geo3x3文字列から緯度経度精度に変換します。


使うほどに改良が進む、プログラミング言語開発。変数の表示を改良して読みやすくなり、文字列の長さに対応、値を返さないreturnができないバグを修正しました。

- Geo3x3
- 教育用手続き型プログラミング言語 - IchigoJam BASIC
- 教育用構造化プログラミング言語 - Wirth(ヴィルト)

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS