gpt4 book ai didi

perl - 是否有可能克服这个 32 位限制?

转载 作者:行者123 更新时间:2023-12-02 07:43:12 25 4
gpt4 key购买 nike

List::Gen 中的笛卡尔 函数似乎受限于我的 64 位 Windows 操作系统上的无符号 32 位上限:

use strict;
use warnings;
use List::Gen '*';
use 5.010;
use bigint; # This didn't help either

say $List::Gen::VERSION; # 0.80

my $diameters = range( 1, 175 );
my @five_in_a_row = ( $diameters ) x 5;

my $combinations = cartesian { \@_ } @five_in_a_row;

say 0+@$combinations; # Should be 175**5 == 164_130_859_375
# prints -1+2**31 == 2_147_483_647

有什么办法可以克服这个限制吗?我的 Perl 构建详细信息如下。

> perl -v

This is perl 5, version 12, subversion 3 (v5.12.3) built for MSWin32-x64-multi-thread (with 9 registered patches, see perl -V for more detail)

最佳答案

在某些时候,由于 perl 将数组索引拟合为 32 位或 64 位整数,生成器的绑定(bind)接口(interface)将始终受到限制。超出该范围,您可以使用生成器的面向对象接口(interface),它不限于 2**31-1,并且比绑定(bind)接口(interface)快得多。

my $combinations = cartesian {\@_} map {range 1 => 175} 1 .. 5;

say $combinations->size; # 164130859375

并获取一个元素:

my $x = $combinations->get(164130859374);

my $x = $combinations->(164130859374);

我会在下一个版本发布之前将自动检测到的 64 位限制添加到改进列表中。

关于perl - 是否有可能克服这个 32 位限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com