Java 的 Double.doubleToLongBits() 的 perl 是什么?

What is the perl equivalent to Java's Double.doubleToLongBits()?

我有两个浮点数,我想计算它们在末位单位 (ULP) 上的差异。在 Java 中是:

Double.doubleToLongBits(a) - Double.doubleToLongBits(b)

Perl 中的等价物是什么?

在具有双精度浮点数[1]和大小至少为 64 位的无符号整数的 Perl 上[2],您可以使用以下内容:

unpack('Q', pack('d', $n))

例如,

$ perl -e'
   use Config qw( %Config );

   die("Not supported\n")
      if $Config{nvsize} != 8
      || $Config{uvsize} < 8;

   printf("%X\n", unpack("Q", pack("d", -0.1)));
'
BFB999999999999A

  1. perl -V:nvsize 给出 8
  2. perl -V:uvsize 给出 8 或更高