E.3使用64位索引编译Octave

注意:以下内容仅适用于具有64位指针的系统。使用配置Octave--enable-64不能神奇地使32位系统具有64位地址空间。

在64位系统上,默认情况下,Octave使用64位整数对数组进行索引。如果配置脚本确定爆破库使用32位整数,则使用以下库的操作仅限于维度小于的数组2^{31}元素:

此外,以下库使用int在内部,somaximum问题的大小总是有限的:

除了GLPK和Qhull,这些库也可以配置为使用64位整数,但大多数系统不提供以这种方式构建的包。如果您希望使用大型数组进行实验,以下信息可能会有所帮助。

要确定的整数大小爆破Octave使用的库,可以执行以下代码:

清除所有;N=2^31;##以下行需要大约8 GB的RAM!a=b=个(N,1,“单个”);c=a'*b

如果爆破库使用32位整数,将引发错误:

错误:整数维度或索引超出FortranINTEGER类型的范围

否则,如果爆破库使用64位整数,结果为:

c=2^31=2147483648

请注意,如果ab不是从赋值的a ____ b。进一步注意,数据类型single具有大约23个二进制位的精度。在这个特定的例子中,没有舍入误差soccur。

通常,最好将所有这些库的版本都支持32位索引,或者所有这些库都必须支持64位索引。将64位索引库与32位索引库混合使用可能会导致不可预测的行为,包括可能丢失数据的程序崩溃。

以下说明是在x86_64 Debian系统上使用Octave和GCC 4.3.4的开发版本进行测试的,现在可能已经过时。请返回Octave错误跟踪器上的任何问题或更正。

下面列出的版本是用于测试的版本。如果这些包的新版本可用,您应该尝试使用它们,尽管可能存在一些差异。

所有库和头文件都将安装在的子目录中$prefix4(您必须选择此目录的位置)。


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号