perl 打印浮点数的精度是多少?

To what precision does perl print floating-point numbers?

提问人:garrett 提问时间:1/1/2013 最后编辑:Jensgarrett 更新时间:1/1/2013 访问量:1128

问:

my $num = log(1_000_000) / log(10);
print "num: $num\n";
print "int(num): " . int($num) . "\n";
print "sprintf(num): " . sprintf("%0.16f", $num) . "\n";

生产:

num: 6
int(num): 5
sprintf(num): 5.9999999999999991

perl 打印浮点数的精度是多少?

使用:为 x86_64-linux-thread-multi 构建的 v5.8.8

Perl 浮点精度

评论

0赞 gaussblurinc 1/2/2013
不!!!停!!!有时这很奇怪。使用或更高5.85.10

答:

10赞 ysth 1/1/2013 #1

在字符串化浮点数时,无论是打印还是其他方式,Perl 通常使用编译它的 float.h 或 limits.h 文件中的 DBL_DIG 或 LDBL_DIG 值。

这通常是 perl 将使用的浮点类型的精度向下舍入。例如,如果使用典型的 double 类型,精度为 53 位 = 15.95 位,而 Perl 通常会以 15 位的精度进行字符串化。