我有一个带有奇怪结果的片段(279.1 ...对比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。
答案 0 :(得分:1)
绝对是Perl解包的错误。至少在32位平台xxxxyyFF
中,它难以以二进制形式80 <= yy <= BF
处理浮点数。打包结果将变为xxxxzzFF
,其中zz = yy + 40
(全部为十六进制)。这是不一个字节序问题,正如你在这里看到的那样:
$ perl -e "print unpack('H8', pack ('f', unpack('f', pack('H8', '000088ff'))));";
0000c8ff
答案 1 :(得分:1)
这是海湾合作委员会的问题。
cpan -t Acme :: Study :: SREZIC在我的32位系统上传递OK,其中Perl二进制文件是用GCC 4.5.4或4.6.3或4.6.4编译的,并且不传递编译Perl二进制文件的系统与GCC 4.7.3或4.8.3