5

Perlは長い間私の選択したスクリプト言語でしたが、私はひどい問題に遭遇しました。デフォルトでは、長い(64ビット)整数はサポートされていません。ほとんどの場合、整数は単なる文字列であり、巨大なファイルを検索するために機能しますが、バイナリ、、、、、、など&、機能しない場所はたくさんあります。printfpackunpack<<>>

現在、これらは新しいバージョンのPerlで機能しますが、64ビット整数サポートでビルドされている場合にのみ機能します。これは、このオプションなしでビルドされたPerlで実行するポータブルコードを作成する場合には役立ちません。また、コードが実行されているシステムでPerlを常に制御できるとは限りません。

私の質問は、Python、PHP、Rubyがそのような問題に苦しんでいるのか、それともバージョンとビルドオプションに依存しているのかということです。

4

4 に答える 4

14

高速ハードウェア整数のサイズ(言語に整数があると仮定)は、言語インタープリター(通常はC)をコンパイルしたコンパイラーが使用できるサイズの整数に常に依存します。

クロスプラットフォーム/クロスバージョンの大きな整数のサポートが必要な場合は、Perlプラグマuse bigint;でうまくいきます。さらに制御が必要な場合bigintは、モジュールのラッパーですMath::BigInt

ロードされるスコープでuse bigint;は、そのスコープ内のすべての整数が透過的にMath::BigInt数値にアップグレードされます。9**9**9最後に、任意の種類の大きな数のライブラリを使用するときは、しばらく待っている可能性があるため、無限大を取得するようなトリックを使用しないでください:)

于 2010-12-15T16:32:18.980 に答える
4

Pythonでは、オーバーフローが発生することはありません。代わりに、Pythonは使用している数値の実装を自動的に切り替えます。基本的な実装ではプラットフォーム上のネイティブintを使用しますが、長整数では無限の長さの数値の実装を使用します。その結果、数値が大きくなりすぎることを心配する必要はありません。Pythonはそれを自然に処理します。

于 2010-12-15T16:33:54.333 に答える
2

Tcl 8.5の長整数のサポートは、ユーザーの観点からはかなり優れています。内部的には、整数を保持するために必要なタイプ(bigintまで)として整数を表し、整数を消費するものはそれらのいずれかを取ります(ただし、独自の制限を課す場合があります。実際には、 Unixファイルモードとしてのみbigintに適合します...)

本当にそれについて考える必要があるのは、固定幅のバイナリ形式に出入りするときだけです。しかし、それはかなり明白です(結局のところ、それは固定幅です)。

于 2010-12-15T16:30:06.943 に答える
1

すみません、bigintMath::BigIntはコアモジュールの一部です。それらの1つをごくわずかuseにすると、どのプラットフォームでも機能します。

于 2010-12-15T16:29:37.433 に答える