フレックス/バイソンで 5^(3+2-sin(15)) のような単純な式の電卓を書いています。ソースコードはhttps://github.com/blueboar2/intervalにあります。たとえば、interval.y には次のような行があります。
| | EXP exp { $$ = exp($2); 結果 = $$; }
| | LN exp { $$ = ログ ($2); 結果 = $$; }
| | SIN exp { $$ = sin($2); 結果 = $$; }
それら ($$、$1、$2) はすべて double であるため、すべて問題ありません。しかし、gmp 精度ライブラリ (たとえば、小数点以下 1000 桁) を使用して、より優れた電卓を構築したいと考えています。したがって、$$、$1 などは double ではなくなり、+/-/sin/exp を対応する gmp に変更する必要があります。どうすればそうできますか?
そのような電卓が存在するgmpの例のディレクトリを見てきましたが、それらは単に(固定サイズの)スタックを組み込み、そこにすべての数値を格納しました。私はこのアプローチが好きではありません。固定サイズのスタック (「成長する」配列を追加するには glib が必要) と、$$ = exp($2) が「スタックから数値を取得し、累乗し、スタックに入れる」よりもはるかに優れているためです。 .