0

私は 32 ビットの Linux マシンを使用しており、TCL 8.5 バージョンを使用しています。4 バイトより長い整数を計算しようとすると、エラーが発生します。しかし、「Mpexpr」パッケージを使用して同じことができます。私の疑問は、私のデータ バス サイズは 32 ビットですが、Mpexpr パッケージをインストールすると、8 バイトの整数を処理できることです。内部の仕組みを知りたい。

% set tcl_platform(wordSize)

4

%
4

1 に答える 1

0

あなたは少し混乱するかもしれないと思います。Tcl 8.5 は、独自の任意精度の整数演算ライブラリ (libtommath のフォーク) を内部的に使用し、整数が無限幅であるかのように常に動作する必要があります。実際の表現は、必要に応じて Clongと実際の任意精度型の間で交換long longされます (ネイティブの数値型を使用する方がはるかに高速であるため、これは良いことです)。明示的な「キャスト」Tcl 関数int()wide().

Tcl 8.4 (またはそれ以前) を使用すると、組み込みの任意精度演算サポートがなく、mpexpr パッケージを使用する必要があるという問題が発生する可能性が高くなりました。

物事がどのように機能するかについては、基本的に、Tcl の値をシステム整数として表す必要がないという事実に由来します。他にも多くの可能な表現があります。たとえば、 along longを使用できます。これは、通常の 32 ビット システムでは 64 ビット幅の整数です。より大きな型の場合、表現は実際には通常、各「数字」が 0 ~ 255 の範囲にある一連の「数字」として表されます。算術演算は、学校で教えられているように、長い加算、長い乗算などの従来のルールに従います。考慮すべき桁数が10を超える場合を除きます。unsigned short(確かに、彼らは代わりにC を使用することができますunsigned char0 ~ 65535 の範囲を指定します。) より高度な操作をかなり迅速に実行できる特殊なアルゴリズムが多数あります。独自の文献検索をお任せします…</p>

于 2013-09-11T12:32:10.750 に答える