自作RPN(逆ポーランド記法)関数電卓
RPN(逆ポーランド記法)の関数電卓が欲しくなって、マイコン(ESP32)で電卓を作ってた記録です。手元にあった部品で作っているので大きくて不細工ですが、追加購入部品なしということで。
まずは整数演算からということで、最初は整数用16桁の電卓を作りました。
内部データはBCD(2進化10進数)で持っており、RPNの特徴であるスタックは連結リストで実現しているため、メモリが不足するまで追加できます。四則演算は筆算のアルゴリズムで完全スクラッチしています。
BCDにしたのは丸め誤差が出ないことと、有効桁数を自由に設計出来るので、難しそうですがチャレンジしてみました。また、計算速度の問題が出ないかと心配しましたが、そんなことはなくマイコンの性能の高さに助けられました。
それだけでは機能が物足りないので、整数モード用の機能として、進数変換機能を追加しました。2進、8進、16進数への変換をします。が、計算はできません。
次に整数電卓に実数モードを追加しました。
有効桁数16桁の浮動小数点演算です。
整数演算のロジックを実数用に拡張して実数の四則演算が出来るようにしました。
続いて三角関数の計算ですが、三角関数ははCORDICアルゴリズムで実装しました。今回作った実数の四則演算を使って計算しています。が、作っている最中、CORDICアルゴリズムの実装バグなのか四則演算ルーチンのバグなのか…まるでブラックボックステストを行いながらの実装でした。三角関数はラジアンではなく度の入力にしました。
まだ未実装の逆三角関数ですが、必要性を感じたら、テーラー展開で実装したいなと思っています。面倒くさそうですが…..
でき上がってからしばらく使っていますが、逆ポーランド記法ってなかなかなれると使いやすいですね。日本語で考えた通りに入力できるので。
計算間違いしないか少々ドキドキしながらですが、割りと満足して使っています。
2024/02/21 追記