浮動小数点数を分解したい場合は、まずそれが bigfloat であることを確認しましょう。いう z: 34.1
lisp を使用して bigfloat の部分にアクセスできます?fpprec
。
したがって 、次のよう?second(z)*2^(?third(z)-?fpprec)
になります。
4799148352916685/140737488355328
そしてあなたにbfloat(%)
与えます:
3.41b1.
z の仮数を整数にしたい場合は?second(z)
、10 進数で達成しようとしていることがわかりませんが、Maxima は 10 進数で内部演算を行いません。
より多くのビットまたはより少ないビットが必要な場合は、次を参照してください。にリンクされている fpprec を設定できます?fpprec
。fpprec は「10 を底とする概算」精度です。したがって、fpprec は最初は 16
?fpprec
ですが、これに対応して 56 になります。
どちらも簡単に変更できます。たとえば、fpprec:100 は?fpprec
of 335 に対応します。
フロート表現をいじっている場合は、次のように入力して任意の Lisp を表示できることを知っておくと役立つ場合があります。
?print(z)
これは、Lisp print 関数を使用して内部フォームを出力します。
トレースによって、独自の関数またはシステム関数の任意の関数をトレースすることもできます。たとえば、これを行うことを検討できます。
trace(append,rnd,integrate);
マシン フロートを使用する場合は、最後の行に次を使用することをお勧めします。
n が 30 から 1 ステップ -1 の場合:
Ibwd:append([[n-1,rnd(1/(2.0*n- 1.0)-a*last(first(Ibwd)),d)]],Ibwd);
小数点に注意してください。しかし、統合は atan(10) のような正確な構造を挿入するため、それでも十分ではありません。これらを丸めたり、それらのログを計算したりすることは、おそらくやりたいことではありません。log は、最初はそうではないと考えていたにもかかわらず、負であることが判明した厄介な表現を与えられているため、Maxima が不満を持っているのではないかと思います。これは、適切な common-lisp 複素数オブジェクトを返すことを完全に喜んでいる Lisp ログ プログラムに数値を渡します。残念なことに、Maxima のほとんどは、LISP が COMPLEX NUMBERS を持つ前に書かれました。
したがって、(log -0.5)= #C(-0.6931472 3.1415927)
Maxima の残りの部分にとって、結果はまったく予想外です。Maxima には、複素数に対して独自の形式があります3+4*%i
。
特に Maxima 表示プログラムは、一般的な Lisp 複素数形式よりも前のものであり、それをどう処理すればよいかわかりません。
エラー (スタック オーバーフロー !!!) は、一般的な Lisp 複素数を表示しようとしている表示プログラムによるものです。
これをすべて修正する方法は?実際に必要なものを計算するようにプログラムを変更してみてください。その場合、おそらくこのエラーは発生しません。Maxima の表示プログラムも修正する必要があります。また、負であるが明らかにそうではない数の対数の単純化には、何か不幸があるのではないかと思います。
これは元の投稿者にとっては情報量が多すぎるかもしれませんが、上記の段落が役立つかもしれませんし、1 つまたは複数の場所で Maxima を改善する可能性もあります。