2012-12-31 17 views
5
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"; 

produkuje:Do jakiej dokładności perl drukuje liczby zmiennoprzecinkowe?

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

Aby co robi precyzja liczb zmiennoprzecinkowych Perl drukowania?

Zastosowanie: v5.8.8 zbudowane dla x86_64-linux-thread-Multi

+0

nr '5.8' !!! zatrzymać!!! to jest czasami dziwne. użyj '5.10' lub wyżej – gaussblurinc

Odpowiedz

9

Kiedy stringifying liczb zmiennoprzecinkowych, czy drukować lub w inny sposób, Perl powszechnie używa wartości DBL_DIG lub LDBL_DIG z float.h lub ograniczeń .h plik, w którym został skompilowany.

Zwykle jest to precyzja typu zmiennoprzecinkowego, który zostanie użyty zaokrąglony w dół. Na przykład, jeśli używa się typowego podwójnego typu, precyzja wynosi 53 bity = 15,95 cyfr, a Perl zwykle jest uszeregowany z 15 cyframi precyzji.

Powiązane problemy