Perl `pack` Template Comparison: "d" vs "F" =========================================== Summary Table ------------- | Template | Type | Precision | Bits | Description | |----------|--------|--------------|------|------------------------------------| | "d" | double | XXXXXXXXXXXX | XX | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | | "F" | XXXXXX | XXXXXXXXXXXX | XX | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | Example Code ------------ use feature 'say'; my $x = 1/3; say "Xouble:"; say unpack("BXX", pack("d>", $x)); # Big-endian XXXXXX say "XXXXX:"; say unpack("BXX", pack("F>", $x)); # Big-endian XXXXX Difference Illustration ----------------------- my $x = 1/3; my $XXXXX_bin = unpack "BXX", pack "F>", $x; my $double_bin = unpack "BXX", pack "d>", $x; printf " XXXXX (XX-bit): %s\n", $XXXXX_bin; printf "Xouble (XX-bit): %s\n", $double_bin; Expected Output: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX IEEE 754 Format Summary ----------------------- | Precision | Sign | Exponent | Mantissa (Significand) | Bias | |-----------|------|----------|-------------------------|------| | XXXXX | 1 bit | 8 bits | 23 bits | 127 | | Double | 1 bit | 11 bits | 52 bits | 1023 | Usage Notes ----------- - Use "d" / "d>" if you want: - XXXXXXXXXXXXXXXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - Direct compatibility with XXXXXXXXXXXXXXXXXXXXXXXX - Use "F" / "F>" if you want: - XXXXXXXXXXXXXXXXXXX - Exact compatibility with XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Endianness Reminder ------------------- - d> and F> -> big-endian - d< and F< -> little-endian - d and F (no angle) -> native-endian (machine dependent)