0

フレックス/バイソンで 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) が「スタックから数値を取得し、累乗し、スタックに入れる」よりもはるかに優れているためです。 .

4

1 に答える 1

0

Bison/Yacc のドキュメントを読み、%unionまたはを見てくださいYYSTYPE。Bison 3.0 以降を使用している場合は、 をお読みくださいhttp://www.gnu.org/software/bison/manual/html_node/Semantics.html

于 2013-10-16T18:27:18.437 に答える