GNU bc 中数组索引/下标的上限是多少?

GNU bc 中数组索引/下标的上限是多少?

我发现 GNU 数组中的下标/索引有一个上限公元前。交互运行并要求 letarr[100000000]=42返回错误:

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

此数组大小限制未在 bc 中列出限制,并且 32767 的“变量名称”限制似乎不会影响这一点,因为 bcarr[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)

数组是一维的,最多可以包含 {BC_DIM_MAX} 个元素。索引应从零开始,因此数组的索引范围为 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。仍不确定为什么这是上限或如何更改它。

相关内容