gpt4 book ai didi

perl - 如何检查 64 位整数的可用性(对于 `use integer` )?

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

我想编写一个需要 40 位整数的程序。我正在编写它的机器有 64 位整数,但我想在程序内部检查是否有 64 位整数可用。

我怎样才能有效地做到这一点?

在 64 位机器上,这似乎可行:

~0 >= 2**63

在不同的架构上是否安全(读作:“便携”)?

考虑到这个问题,我还想知道 Perl 编译器或解释器是否会使这些结果对 future 的 Perl 版本产生疑问:

  DB<2> sub bittest { use integer; return ((1 << $_[0]) >> $_[0]) != 0; }

DB<3> x bittest 31
0 1
DB<4> x bittest 63
0 1
DB<5> x bittest 64
0 ''

最佳答案

如果您需要计算机意义上的整数 (IV/UV),则需要它们的大小至少为 40 位。

~0 >= 2**40-1

use Config qw( %Config );

$Config{uvsize} >= 8

uvsize 指的是此类整数的字节大小。

如果您使用以下任何一项,则需要此信息:

  • 将数字作为按位运算符的操作数
  • 作为操作数的数字 ../...
  • 打包“Q”/解压“Q”
  • 大于 0xFFFF_FFFF 的十六进制文字

如果您需要数学意义上的整数,精度至少为 40 位的 float (NV) 也可以。

use Config qw( %Config );

$Config{uvsize} >= 8 || eval($Config{nv_overflows_integers_at}) >= 2**40

包括 eval($Config{nv_overflows_integers_at}) 在内的每个整数都可以精确表示为 NV。

请注意,每个 Perl 版本都应至少支持 53 位精度。例如,eval($Config{nv_overflows_integers_at}) 在我的构建中评估为 9007199254740992,根据 log(9007199254740992)/log(2) 对应 53 位)

关于perl - 如何检查 64 位整数的可用性(对于 `use integer` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68890205/

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