JargonFile/entries/magic number.txt
2014-04-26 16:54:15 +01:00

34 lines
2.1 KiB
Plaintext

magic number
n. [Unix/C; common] 1. In source code, some non-obvious constant whose value
is significant to the operation of a program and that is inserted
inconspicuously in-line ( hardcoded ), rather than expanded in by a symbol
set by a commented #define. Magic numbers in this sense are bad style. 2. A
number that encodes critical information used in an algorithm in some opaque
way. The classic examples of these are the numbers used in hash or CRC
functions, or the coefficients in a linear congruential generator for
pseudo-random numbers. This sense actually predates and was ancestral to the
more common sense 3. Special data located at the beginning of a binary data
file to indicate its type to a utility. Under Unix, the system and various
applications programs (especially the linker) distinguish between types of
executable file by looking for a magic number. Once upon a time, these magic
numbers were PDP-11 branch instructions that skipped over header data to the
start of executable code; 0407, for example, was octal for branch 16 bytes
relative. Many other kinds of files now have magic numbers somewhere; some
magic numbers are, in fact, strings, like the ! arch at the beginning of a
Unix archive file or the %! leading PostScript files. Nowadays only a wizard
knows the spells to create magic numbers. How do you choose a fresh magic
number of your own? Simple you pick one at random. See? It's magic! 4. An
input that leads to a computational boundary condition, where algorithm
behavior becomes discontinuous. Numeric overflows (particularly with signed
data types) and run-time errors (divide by zero, stack overflows) are
indications of magic numbers. The Y2K scare was probably the most notorious
magic number non-incident. The magic number, on the other hand, is 72. See
The magical number seven, plus or minus two: some limits on our capacity for
processing information by George Miller, in the Psychological Review
63:81-97 (1956). This classic paper established the number of distinct items
(such as numeric digits) that humans can hold in short-term memory. Among
other things, this strongly influenced the interface design of the phone
system.