6

我的这个片段有一个奇怪的结果(279.1... vs. 279.6...):

$ perl -e "print unpack('f>', pack ('f>', 279.117156982422));"
279.617156982422

虽然这个有效

$ perl -e "print unpack('f>', pack ('f>', 279.117256982422));"
279.117248535156

还有那些

$ perl -e "print unpack('f<', pack ('f<', 279.117156982422));"
279.11715698242

$ perl -e "print unpack('f', pack ('f', 279.117156982422));"
279.117156982422

怎么了?这是解压非本地字节序浮点值的错误吗?

注意 Perl 是PC 上Cygwin下的 5.14.2 版本。

4

2 回答 2

1

绝对是 Perl 解包中的一个错误。xxxxyyFF至少在 32 位平台上处理二进制形式的浮点数有困难,其中80 <= yy <= BF. 打包结果将变为xxxxzzFF, where zz = yy + 40(全部为十六进制)。这不是字节顺序的问题,如您在此处看到的:

$ perl -e "print unpack('H8', pack ('f', unpack('f', pack('H8', '000088ff'))));"; 
0000c8ff
于 2013-10-16T13:33:55.417 回答
1

这是一个 GCC 问题。

cpan -t Acme::Study::SREZIC 在使用 GCC 4.5.4 或 4.6.3 或 4.6.4 编译 Perl 二进制文件的 32 位系统上通过 OK,而在使用 GCC 4.7 编译 Perl 二进制文件的系统上则不通过.3 或 4.8.3

于 2014-11-25T01:05:57.380 回答