Zero-based numbering, also referred to as zero-based indexing, is a convention in computer programming and data structures where the first element of a sequence—such as an array, list, or string—is assigned the index 0, with subsequent elements indexed as 1, 2, and so on, up to n-1 for a sequence of lengthn.[1] This method contrasts with one-based numbering, which starts indexing at 1, and is the standard in most modern programming languages, including C, Python, Java, and JavaScript, due to its alignment with low-level memory addressing mechanisms.[2] In practice, it facilitates direct offset calculations for accessing elements, where the address of an element at indexi is computed as the base address plus i times the element size, avoiding the need for an initial subtraction.[3]The origins of zero-based numbering trace back to early computer hardware and assembly languages, where arrays were implemented as contiguous memory blocks starting from a base address, naturally positioning the first element at offset 0.[1] This practice was carried over into high-level languages beginning in the 1960s, with precursors like BCPL employing zero-based indexing for pointer arithmetic and array access.[4] It gained prominence through the C programming language in the 1970s, whose design emphasized efficiency and close correspondence to machine code, influencing the adoption in subsequent languages like C++ and derivatives.[1] Computer scientist Edsger W. Dijkstra further advocated for it in his 1982 manuscript, arguing that for a sequence of length N, the range 0 ≤ i < N provides a more natural and error-resistant way to express bounds compared to alternatives like 1 ≤ i ≤ N.[5]Key advantages of zero-based numbering include computational efficiency, as it eliminates the need to adjust indices during pointer arithmetic or loop iterations, and compatibility with half-open intervals (e.g., [0, N)), which simplify operations like array slicing and concatenation without off-by-one errors.[3] For instance, in Python, slicing a list from index 0 to 3 yields the first four elements exactly, mirroring the interval's length.[2] While some languages like Fortran and MATLAB retain one-based indexing for mathematical intuitiveness, zero-based remains dominant in systems programming and general-purpose computing due to its hardware-aligned simplicity.[1] Beyond programming, it appears in fields like digital signal processing and graphics, where coordinate systems often origin at (0,0).[3]
Fundamentals
Definition
Zero-based numbering, also known as zero-based indexing, is a convention used in computing and mathematics where the initial element of a sequence or array is assigned the index or position 0, rather than 1 as in traditional counting systems.[5] This approach treats the position of an element as the number of preceding elements in the sequence, emphasizing displacement or offset from the starting point.[5] In contrast, human counting typically begins with 1 for the first item, aligning with cardinal numbers that denote quantity starting from unity, whereas zero-based systems adapt ordinal numbering—used to indicate position—to start at zero for computational efficiency.[1]A fundamental prerequisite for understanding zero-based numbering is the distinction between cardinal numbers, which count the total quantity (e.g., three items), and ordinal numbers in sequences, which specify relative positions.[6] In zero-based systems, the ordinal position of the first element is 0, meaning no elements precede it, while subsequent elements are numbered sequentially as offsets: 1 for the second, 2 for the third, and so on, up to n-1 for the last element in a sequence of length n.[5] This offset-based perspective highlights that indices represent the distance from the beginning rather than an absolute count.[6]For example, consider a simple list of three fruits: apple, banana, and cherry. In zero-based numbering, the positions are assigned as follows:
This structure is commonly applied to array indices in data structures, where the first element is accessed via subscript 0, the second via 1, and so forth, ensuring the highest index is always one less than the array's length.[1] Such indexing underscores the key principle that zero-based systems prioritize the first element as the origin point with zero displacement, facilitating precise referencing in ordered collections.[5]
Historical Development
The concept of zero as a placeholder in numerical systems originated in ancient Indian mathematics during the 7th century, where Brahmagupta formalized its use in arithmetic operations, treating it as a distinct number with defined properties such as addition and subtraction rules in his text Brahmasphuṭasiddhānta.[7]In computing, zero-based numbering emerged in the mid-20th century amid hardware constraints and early programming paradigms, with assembly languages and machines like those from the 1940s-1950s employing zero offsets for memory addressing to simplify pointer calculations. The ALGOL 60 report (1960) formalized flexible array bounds, permitting declarations starting at zero (e.g., array a[0:10]), which allowed implementers to adopt zero-based indexing despite common one-based defaults inspired by mathematics.[8] This practice was further entrenched in BCPL, developed by Martin Richards in 1967, which used zero-based indexing for pointer arithmetic and influenced subsequent systems languages. It gained prominence through the C programming language, developed by Dennis Ritchie in 1972 at Bell Labs for Unix, where arrays were strictly zero-based to align with efficient pointer arithmetic, treating the first element as offset zero from the array's base address.[9]A pivotal advocacy for zero-based ordinals came in 1982 with Edsger W. Dijkstra's note EWD 831, "Why Numbering Should Start at Zero," which argued mathematically that an element's position equals the count of preceding elements, making zero the natural starting point for sequences to avoid off-by-one errors in range specifications.[5] This reflected a broader shift from one-based systems like FORTRAN (introduced in the 1950s for scientific computing, mirroring mathematical vector indexing starting at 1) to zero-based in subsequent languages, driven by hardware realities where memory offsets begin at zero, enhancing performance in pointer-based operations without additional adjustments.[10]
Numerical Properties
Indexing Mechanics
In zero-based numbering, the indices of a sequence or array of length n range from 0 to n-1, where the index of each element corresponds to the count of preceding elements. This ordinal alignment simplifies displacement-based operations, such as calculating offsets from a starting point. The position of an element at index i is determined by multiplying the index by the size of each element, yielding an offset of i \times element size from the base.[5][11]Key numerical properties of zero-based indexing include its compatibility with modulo arithmetic in iterative loops, where an index i typically iterates from 0 to n-1; this setup ensures that operations like i \mod n naturally cycle without offset adjustments, preserving the structure of the ring in modular arithmetic. Additionally, half-open intervals of the form [0, n) are standard for defining ranges, as the upper bound n directly matches the sequence length, enabling straightforward bounds checking and range compositions without arithmetic discrepancies.[5]The memory address for accessing an element is computed using the formula\text{address} = \text{base} + (\text{index} \times \text{element\_size}),where the index begins at 0; this direct offset from the base address optimizes pointer arithmetic in low-level implementations, avoiding extra subtractions that would arise from one-based schemes.[11]Zero-based indexing mitigates off-by-one errors in contexts involving displacement counting, as the index reflects the precise offset from the origin, reducing the likelihood of boundary mismatches in range specifications compared to alternatives that introduce artificial shifts. In recursive procedures, the base case frequently aligns with index 0, denoting the minimal or empty subproblem—such as computing the value for a zero-length sequence—allowing the recursion to terminate cleanly without redundant checks.[5][12]Accessing an array element via zero-based indexing exhibits constant time complexity O(1), since the address calculation requires only fixed arithmetic steps—multiplication and addition—regardless of the array's size or the specific index value.[13]
Comparison with One-based Numbering
Zero-based numbering and one-based numbering differ fundamentally in their starting index: zero-based systems assign the initial element an index of 0, while one-based systems begin at 1, as seen in languages like MATLAB and R, which align with intuitive human counting and mathematical conventions for sequences.[14][15] This design choice in one-based indexing facilitates direct correspondence to ordinal positions but introduces complexities in low-level memory addressing, where the offset for the first element requires no adjustment in zero-based systems (address = base + index * element_size), whereas one-based requires address = base + (index - 1) * element_size, adding an extra subtraction operation that can complicate pointer arithmetic and hardware implementations.[3][16]Zero-based numbering offers advantages in computational efficiency and simplicity for array operations, particularly in defining bounds from 0 to n-1, which streamlines modulo arithmetic (e.g., wrapping indices with i % n yields valid positions without adjustment) and reduces the risk of off-by-one errors in certain loop constructs.[17] For instance, a zero-based loop iterates as for (i = 0; i < n; i++), directly matching the array size n, whereas a one-based equivalent uses for (i = 1; i <= n; i++), where the inclusive upper bound can lead to inadvertent overflows if miscoded.[18] However, zero-based indexing can be counterintuitive for beginners accustomed to natural numbering, potentially increasing initial learning curves in non-technical contexts.[19] Conversely, one-based indexing excels in readability for users from mathematical or statistical backgrounds, avoiding the mental shift to subtract 1 for the first position, though it demands careful handling of offsets in mixed-language integrations or low-level code.[20]Some languages adopt hybrid approaches to mitigate these trade-offs; for example, Python employs zero-based indexing overall but designs its slicing operations to evoke a one-based intuition, where a[:n] extracts the first n elements (starting implicitly from the "first" at 0) and adjacent slices like a[:i] and a[i:] abut seamlessly without overlap or gap, enhancing usability for sequence manipulations.[21] Regarding performance, the index adjustment in one-based systems has minimal impact on large datasets in modern high-level languages, as compilers or interpreters optimize the subtraction (e.g., Julia subtracts 1 internally without runtime penalty), though zero-based remains preferable in performance-critical, low-level code where every cycle counts.[22]
Applications in Computing
Origins in Programming
The adoption of zero-based numbering in programming emerged from the hardware-oriented practices of early computing in the 1950s, particularly in assembly languages where memory and registers were addressed using zero offsets. Machines like the IBM 704, introduced in 1954, featured index registers that treated a zero tag as equivalent to an imaginary register containing zeros, enabling efficient address modification without indexing for base locations. This convention aligned with low-level operations, where the first element of a data structure occupied the base memory address, making zero the natural offset for the initial position. Assembly programmers routinely used these zero offsets for registers and memory arrays, as direct hardware addressing avoided unnecessary adjustments and leveraged the linear nature of memory.[23]A pivotal development occurred with the B programming language, created by Ken Thompson in 1969 at Bell Labs as a simplified derivative of BCPL for use on the PDP-7. B employed zero-based array indexing to treat arrays as pointers to their first element, facilitating seamless integration with memory addressing where indices acted as offsets from the base address. This design was inherited and standardized in the C language, developed by Dennis Ritchie between 1972 and 1973, primarily for its compatibility with pointer arithmetic and efficient implementation on Unix systems. In C, arrays decay to pointers to their zeroth element, allowing expressions like array to compute as base + i * size, which mirrors hardware-level addressing and avoids runtime overhead for bounds adjustment.Hardware architectures further reinforced zero-based numbering through CPU addressing modes that favored zero as the null offset, simplifying instructions for sequential access and avoiding negative indices, which were impractical given positive memory addresses starting from zero. Early punch-card based systems, such as those for FORTRAN on IBM machines, contrasted this by using one-based indexing to align with human-readable numbering in data processing tabs. However, Edsger Dijkstra advocated for zero-based conventions in the context of structured programming during the 1960s and 1970s, arguing in his 1982 note that it better reflects the cardinality of preceding elements in sequences, promoting mathematical clarity in algorithmic design.[5]ALGOL 68, finalized in 1968, introduced flexible array bounds allowing programmers to specify any integer range, including zero-based, though the language report defaulted lower bounds to 1 for compatibility with prior ALGOL standards. Implementations often adapted to zero-based defaults in hardware-constrained environments to optimize for pointer-like operations, bridging the gap between mathematical flexibility and practical computing efficiency.[24]
Usage in Programming Languages
In imperative programming languages such as C, C++, Java, and JavaScript, arrays and strings employ strict zero-based indexing, where the first element is accessed at index 0.[25][26] This convention facilitates efficient memory addressing, as the index directly represents the offset from the base address of the data structure.[27]Scripting languages like Python and Ruby also utilize zero-based indexing for lists and arrays, with additional support for slicing operations that enhance data manipulation. In Python, the list.index() method returns a zero-based position for elements.[28] Similarly, Ruby's Array class explicitly states that indexing begins at 0, akin to C and Java, while allowing negative indices to reference elements from the end.[29]Notable exceptions and hybrid approaches exist in certain languages. Fortran defaults to one-based indexing for arrays, where the first element is at index 1, though zero-based indexing can be specified via explicit lower bounds in array declarations.[30] Lua's tables, which function as arrays for sequential data, start numeric keys at 1 by convention, aligning with mathematical traditions.[31]MATLAB employs one-based indexing for vectors and matrices, reflecting its origins in numerical computing and matrix operations.[32]The majority of modern programming languages adopt zero-based indexing, primarily due to the pervasive influence of C on language design and systems programming paradigms.[17] Libraries such as NumPy in Python maintain zero-based indexing for ndarrays, though users can simulate one-based access through offset adjustments like arr[1:].[33]Specific implementations reinforce this standard for safety and performance. Go's slices, which provide a view into underlying arrays, use zero-based indexing to enable dynamic subarray handling. Rust's vectors start indexing at 0, integrating bounds checking via methods like get() to prevent common errors in memory-unsafe operations.[34]
Practical Implementations
In the C programming language, arrays are accessed using zero-based indexing, where the first element is at index 0. For example, declaring an array as int arr[3] = {1, 2, 3}; allows access to the elements via arr[0] (value 1), arr[1] (value 2), and arr[2] (value 3). This indexing aligns with pointer arithmetic, as demonstrated by dereferencing the base address plus an offset, such as *(arr + 0) to retrieve the first element.[35]Python lists also employ zero-based indexing for element access and slicing operations. Consider a list lst = [10, 20, 30, 40], where lst[0] returns 10, the first element, and slicing lst[0:3] extracts the sublist [10, 20, 30], including elements from index 0 up to but not including index 3.[28]Common data structures in programming leverage zero-based numbering for efficient traversal and storage. In linked lists, the head node represents the zeroth position, enabling sequential access starting from index 0 through pointer navigation to subsequent nodes.[36] Similarly, hash tables organize buckets as an array with zero-based indices, where a key's hash value modulo the bucket count determines the starting index (often 0) for collision resolution via chaining.[37]Error handling in zero-based systems often involves exceptions for invalid indices. In Python, attempting to access an index outside the list's bounds, such as a negative index beyond the length or a positive index exceeding it, raises an IndexError with a message like "list index out of range." This mechanism prevents undefined behavior but highlights the risk of off-by-one errors, such as the fencepost error, where programmers miscount boundaries in loops or allocations, leading to subtle bugs like accessing one element too few or too many.[38][39]In application programming interfaces (APIs), zero-based conventions appear in parameter arrays or response structures, ensuring consistency with underlying language implementations, though protocol-specific codes like HTTP status categories begin at 100 for informational responses rather than 0xx.[40]
Scientific Applications
In Mathematics and Physics
In mathematics, zero-based numbering is commonly employed in the indexing of sequences and series, where the initial term is assigned index 0 to reflect its foundational role. For instance, the Fibonacci sequence is defined with F_0 = 0 and F_1 = 1, followed by the recurrence F_n = F_{n-1} + F_{n-2} for n \geq 2, allowing the zeroth term to serve as the starting point that naturally leads to the sequence's integer properties.[41] Similarly, Bernoulli numbers B_n are defined via the generating function \frac{x}{e^x - 1} = \sum_{n=0}^\infty B_n \frac{x^n}{n!}, where B_0 = 1 acts as the constant term essential for the expansion's convergence and application in series like the Euler-Maclaurin formula.[42] This zero-based approach in generating functions ensures the inclusion of the constant or initial term, facilitating analytic continuations and summations from the outset.In physics, zero-based indexing appears in the formulation of moments, which quantify distributions of mass, charge, or probability. The zeroth moment in mechanics represents the total mass M = \int \rho \, dV, where \rho is the mass density and the integral is over the volume, establishing the baseline for higher-order moments like the center of mass.[43] In statistical mechanics and probability distributions, raw moments are defined as \mu_k = \int_{-\infty}^\infty x^k f(x) \, dx, with the zeroth moment \mu_0 = 1 enforcing normalization of the probability density function f(x).[44] This normalization underscores the zeroth order's role in ensuring the total probability integrates to unity across physical systems like particle distributions.The zeroth law of thermodynamics exemplifies zero-based numbering in axiomatic foundations, stating that if two systems are each in thermal equilibrium with a third, they are in thermal equilibrium with each other, defining temperature transitively; it was formalized and named by Ralph H. Fowler in 1936 as the zeroth law to precede the first and second laws logically.[45] Additionally, coordinate systems in physics routinely adopt zero-based origins, such as the Cartesian plane with the point (0,0) as the intersection of axes, serving as the reference for vector displacements and equilibrium positions in mechanics and electromagnetism.
In Biology and Medicine
In biology, zero-order intentionality represents the lowest level in the hierarchy of theory of mind, attributing no mental states or awareness to an organism's behavior, which is instead driven by automatic instincts, reflexes, or drives.[46] This concept applies to simple organisms, such as bacteria or basic invertebrates, where actions like chemotaxis occur without any meta-representation of intentions or others' perspectives.[47] In contrast to higher-order intentionality seen in more complex animals, zero-order intentionality underscores purely reactive processes without goal-directed mental modeling.[46]Zero-order kinetics similarly describes reactions in biological systems where the rate remains constant and independent of reactant concentration, a phenomenon common in enzyme-catalyzed processes when the enzyme is fully saturated with substrate.[48] In such cases, the reaction rate equals a constant k, expressed as:\text{rate} = kThis differs from first-order kinetics, where rate depends linearly on concentration, or higher orders involving more complex dependencies; in enzymes, saturation leads to maximal velocity (V_{\max}) without further acceleration by additional substrate.[49] Examples include alcohol dehydrogenase in ethanol metabolism, where elimination proceeds at a fixed rate regardless of blood alcohol levels above a threshold.[48]In medicine, zero-based numbering establishes baselines in clinical trials by designating day 0 as the starting point, such as the day of diagnosis or initial intervention, from which patient outcomes are tracked longitudinally.[50] This convention facilitates precise measurement of changes over time, with pre-dose assessments often recorded on or before day 0 to define the baseline state.[51] Similarly, drug dosing schedules in pharmacokinetics begin at time 0, marking the moment of administration to calculate metrics like area under the curve (AUC) from t=0 onward, ensuring standardized evaluation of absorption, distribution, and elimination.[52]Epidemiology employs zero-based indexing through the concept of "patient zero," the identified index case in outbreak investigations, serving as the origin point for tracing disease transmission networks.[53] A notable example occurred during the 1980s HIV/AIDS epidemic in North America, where the U.S. Centers for Disease Control and Prevention (CDC) investigations labeled Gaétan Dugas as patient zero in a cluster study among gay men in Los Angeles, though later analyses clarified he was not the initial introducer but a key node in early spread.[54] This approach highlights zero-based numbering's role in reconstructing epidemic timelines from the presumed starting case.In bioinformatics, a subfield bridging biology and computing, DNA sequences are often indexed from position 0 in analysis tools to align with zero-based array conventions in programming languages.[55] For instance, genomic intervals in formats like BED (Browser Extensible Data) use zero-based starting coordinates, enabling efficient slicing and manipulation of sequence data in pipelines for variant calling or alignment.[56] This practice contrasts with one-based biological notations but enhances computational precision in tools processing large-scale sequencing datasets.
Applications in Other Fields
In Timekeeping and Calendars
In timekeeping systems, zero-based numbering is commonly employed to denote the start of a day. The 24-hour clock format, widely used internationally, begins at 00:00 to represent midnight, marking the initial hour as zero rather than one.[57] This convention aligns with the ISO 8601 standard for data interchange, which specifies the first hour of the day as 00, ensuring unambiguous representation of time points in digital systems.[58] In military contexts, the 24-hour clock similarly uses 00:00 for midnight to eliminate the ambiguity associated with 12:00 in 12-hour formats, facilitating precise coordination.[57]Certain cultural timekeeping traditions incorporate zero-based elements differently. In Japan, the term "zero o'clock" (零時, reiji) refers to both midnight and noon, reflecting a zero-origin point for these transitional moments in traditional verbal expressions, though modern digital clocks adhere to standard 00:00 for midnight.[59]Calendar systems also utilize zero-based numbering in specific conventions. Astronomical year numbering introduces a year zero to bridge the transition from 1 BC to AD 1, treating 1 BC as year 0000 in proleptic extensions, which avoids a direct jump and supports continuous chronological calculations in scientific contexts.[60] The ISO 8601 standard incorporates this by representing year 0000 as equivalent to 1 BC in its date reference system.[60] In contrast, the proleptic Gregorian calendar omits a year zero, progressing directly from year -1 (2 BC) to year 1 (AD 1), a convention rooted in historical Christian dating that influences modern civil calendars.[61]The Buddhist calendar, used officially in countries like Thailand, designates a year zero corresponding to the epoch of the Buddha's parinirvana (final passing), from which subsequent years are counted forward, providing a zero-based origin for this lunisolar system.[62] In computing-related timekeeping, Unix time employs a zero epoch at 1970-01-01 00:00:00 UTC, measuring elapsed seconds from this point as the baseline zero for timestamp calculations in POSIX-compliant systems.[63]Examples of zero-based numbering appear in practical temporal applications. Sports timing often starts stopwatches at 0:00 to indicate the beginning of an event, such as in track races or game clocks, emphasizing the zero point as the origin of measurement. Similarly, the roulette wheel in casino gaming features a prominent zero (0) pocket as the starting or neutral position in its numbering sequence from 0 to 36 (or including 00 in American variants), which introduces the house edge in probability calculations.[64]
In Architecture and Education
In architecture, particularly in Europe and Asia, zero-based numbering is commonly applied to floor levels, where the ground floor is designated as level 0, often labeled as "rez-de-chaussée" in French-speaking regions like France and Belgium. This convention treats the ground level as the reference point (0), with subsequent floors numbered positively upward (1, 2, etc.) and basements negatively (e.g., B-1 or -1 for the first sublevel).[65][66] For instance, in multi-story buildings, this system facilitates clear vertical navigation, as seen in elevator indicators that display 0 for the street-level entry.[67]European Union building specifications further incorporate floor 0 in accessibility standards, defining it as the primary level with direct street access, aligning with EU construction and accessibility regulations.[68] In taller structures such as skyscrapers, this zero-based approach persists, with floors sometimes skipping the number 13 due to cultural superstitions while retaining 0 for the ground level. Beyond buildings, zero-based numbering appears in infrastructure like the Brussels Ring Road (R0), which encircles the capital as the outermost orbital route, spanning approximately 75 kilometers to manage regional traffic flow.[69] Similarly, Swiss Federal Railways stations, such as Aarau, feature platform 0 to accommodate expanded layouts without renumbering existing tracks.[70]In education, zero-based numbering manifests in academic scheduling, notably through "Week 0" or "Nought Week," a pre-term orientation period for incoming students. At the University of Oxford, Nought Week precedes the official term start, providing time for enrollment, campus familiarization, and social integration, typically beginning on the Sunday before Week 1.[71] This practice extends to military training programs, such as the U.S. Air Force Basic Military Training, where Zero Week serves as the initial processing phase, including medical checks, uniform issuance, and foundational instruction on discipline and physical readiness, lasting about five days before formal training commences.[72][73]Some educational systems employ zero-based grading, which evaluates performance starting from a baseline of 0 without minimum thresholds or carryover from prior assessments, emphasizing current mastery of competencies in subjects like mathematics or sciences.[74] This approach, adopted in select institutions to promote equity, contrasts with traditional percentage scales by focusing on skill acquisition rather than punitive deductions.
In Arts and Entertainment
In music, zero-based numbering occasionally appears in symphonic works and catalogs, reflecting composers' decisions to designate early or withdrawn compositions as "No. 0" to maintain sequential integrity in their oeuvre. For instance, Anton Bruckner's Symphony in D minor, composed in 1869, is known as his Symphony No. 0 or "Die Nullte" because he later disavowed it after completing his official Symphony No. 1 in 1866, effectively nullifying its position in the standard numbering while preserving the chronology.[75][76] Similarly, Alfred Schnittke's Symphony No. 0, an early student work from 1956–1957, embodies zero-based designation for pre-official symphonies, highlighting its experimental roots before his numbered series began.[77]In literature and film, zero-based numbering serves narrative purposes in prequels and foundational concepts, positioning origins outside traditional sequences. The 2000 Japanese horror film Ring 0: Birthday, directed by Norio Tsuruta, acts as a prequel to the Ring series, with its title explicitly using "0" to denote its placement before the events of the original 1998 film, exploring the backstory of the antagonist Sadako.[78] In science fiction, Isaac Asimov introduced the Zeroth Law of Robotics in his 1985 novel Robots and Empire, superseding the original Three Laws by prioritizing humanity's collective well-being: "A robot may not harm humanity, or, by inaction, allow humanity to come to harm," thus retroactively grounding the ethical framework in a zero-based hierarchy.[79]Comics and games have employed zero-based elements for iconic or wildcard symbolism. Robert Crumb's Zap Comix #0, published in late 1968 by Apex Novelties, served as an unnumbered precursor to the underground series, featuring satirical characters like Mr. Natural and establishing the raw, countercultural tone before the standard issue sequence.[80] In the card game Uno, introduced in 1971, each color deck includes a single 0 card, which functions as a pivotal low-value play that can reverse direction in house rules or emphasize the game's starting point from zero, though official rules treat it as a standard number card.[81] Historically, Formula One racing assigned car number 0 in the 1990s to the second driver of the defending constructors' champions when the prior year's winner did not return, such as Damon Hill's use of #0 for Williams in 1996, symbolizing a provisional or non-primary status in the numbering system.[82]In sports entertainment, zero-based numbering manifests in uniforms and scoring conventions that underscore beginnings and neutrality. Major League Baseball pitchers have worn uniform number 0, including Adam Ottavino (New York Mets, 2018–2023) and Jack Flaherty (Detroit Tigers, 2024), selecting it for its minimalist appeal and rarity, with only 14 players total having used it since 1900.[83] Across various sports, matches universally commence with a 0-0 score, termed "love" in tennis, "nil" in soccer, or simply "zero" in baseball and basketball, establishing a neutralbaseline that heightens dramatic tension from the outset.[84]Even in the arts-adjacent realm of open-source software culture, the Free Software Foundation's 1985 definition incorporates zero-based numbering in its four essential freedoms, starting with Freedom 0—the right to run programs for any purpose—as the foundational principle, influencing creative coding communities and digital media production.[85]