GNU bcの配列インデックス/スクリプトの上限はいくらですか?

GNU bcの配列インデックス/スクリプトの上限はいくらですか?

GNU配列の添字/インデックスに上限があることがわかりました。紀元前。対話的に実行し、letにarr[100000000]=42エラーを返すように依頼します。

 Runtime error (func=(main), adr=17): Array arr subscript out of bounds.

この配列サイズの制限はbcにリストされていません。限界、そして32767という「変数名」の制限はこれに影響を与えないようです。 bcはarr[100000]=42苦情なしにそれを許可するからです。 bcの配列添字/インデックスの正確な範囲は何ですか?この境界を変更する方法はありますか?

答え1

次の制限が表示されますbc

$ echo 'limits' | bc
BC_BASE_MAX     = 2147483647
BC_DIM_MAX      = 16777215
BC_SCALE_MAX    = 2147483647
BC_STRING_MAX   = 2147483647
MAX Exponent    = 9223372036854775807
Number of vars  = 32767

私たちは見ましたman bc (1p)

配列は1次元で、最大{BC_DIM_MAX}個の要素を含めることができます。インデックスは0から始まる必要があるため、配列のインデックス範囲は0から{BC_DIM_MAX}-1です。

調査1.07.1ファイルで定義されていますconst.h


/* Definitions for arrays. */

#define BC_DIM_MAX   16777215     /* this should be NODE_SIZE^NODE_DEPTH-1 */

#define   NODE_SIZE        64     /* Must be a power of 2. */
#define   NODE_MASK      0x3f     /* Must be NODE_SIZE-1. */
#define   NODE_SHIFT        6     /* Number of 1 bits in NODE_MASK. */
#define   NODE_DEPTH        4

答え2

試行錯誤を経て上限は2²⁴=16,777,216です。まだわからないなぜこれは上限値ですか、それともどのように変更しますか?

関連情報