Numeració des de zero
La numeració des de zero és una forma de numeració en la que l'element inicial d'una seqüència s'assigna al índex 0, en lloc de l'índex 1, com és típic en circumstàncies quotidianes no matemàtiques o no relacionades en la programació. Baixe la numeració des de zero, l'element inicial a voltes es denomina l'element «zero»,[1] en lloc de l'element «primer»; «zero» és una paraula falcada per al número ordinal zero. En alguns casos, un objecte o valor que no pertany (originalment) a una seqüència donada, pero que podria colocar-se naturalment abans del seu element inicial, pot denominar-se l'element zero. No hi ha un acort ampli sobre la correcció d'usar zero com a ordinal (ni sobre l'us del terme «zero»), ya que crea ambigüitat per a tots els elements subsegüents de la seqüència quan falta context.
La numeració de seqüències que comencen en 0 és prou comuna en la notació matemàtica, en particular en combinatòria, encara que els llenguages de programació per a matemàtiques usualment indexen des d'1.[2][3][4] En les ciències de la computació, els índexs de vectores usualment comencen en 0 en els llenguages de programació moderns, per lo que els programadors podrien usar «zero» en situacions a on uns atres usarien «primer», i aixina successivament. En alguns contexts matemàtics, la numeració des de zero pot usar-se sense confusió, quan les formes ordinals tenen un significat ben establit en un candidat obvi per a precedir al «primer»; per eixemple, una «derivada zero» d'una funció és la funció mateixa, obtinguda al diferenciar zero voltes. Este us correspon a nomenar un element que no pertany pròpiament a la seqüència pero la precedix: la derivada zero no és realment una derivada en absolut. No obstant, aixina com la «primera derivada» precedix a la «segona derivada», també la «derivada zero» (o la funció original mateixa) precedix a la «primera derivada».
Programació de computadores
[editar | editar còdic]Orige
[editar | editar còdic]Martin Richards, creador del llenguage BCPL (un precursor de C), va dissenyar vectores que inicien en 0 com la posició natural per a començar a accedir al contingut del vector en el llenguage, ya que el valor d'un punter p usat com a direcció accedix a la posició p + 0 en la memòria.[5][6] BCPL va ser compilado per primera volta per a l'IBM 7094; el llenguage no va introduir busques d'indirección en temps d'eixecució, per lo que l'optimisació de indirección proporcionada per estos vectores es realisava en temps de compilació.[6] L'optimisació va ser, no obstant, important.[6][7]
En 1982, Edsger W. Dijkstra en la seua nota pertinent «Per qué la numeració deu començar en zero»[8] va argumentar que els subíndexs de vectores deuen començar en zero, sent este últim el número més natural. Discutint possibles dissenys de rancs de vectores en tancar-los en una desigualtat encadenada, combinant desigualtats estrictes i estàndarts en quatre possibilitats, demostrant que, segons la seua convicció, els vectores des de zero es representen millor en rancs d'índexs no superposts que comencen en zero, aludint a intervals oberts, semiabiertos i tancats com en els número real. Els criteris de Dijkstra per a preferir esta convenció són, en detalle, que representa seqüències buides d'una manera més natural (a ≤ i < a ?) que els «intervals» tancats (a ≤ i ≤ (a − 1) ?), i que en «intervals» semiabiertos de naturals, la llongitut d'una subsecuencia és igual al llímit superior menys el llímit inferior (a ≤ i < b dona (b − a) valors possibles per a i, en a, b, i tots sancers).
Us en llenguages de programació
[editar | editar còdic]Este us seguix de les decisions de disseny incrustades en molts llenguages de programació influents, incloent C, Java i Lisp. En estos tres, els tipos de seqüència (vectores de C, vectores i llistes de Java, i llestes i vectores de Lisp) s'indexen començant en el subíndex zero. Particularment en C, a on els vectores estan estretament vinculats a l'aritmètica de punters, açò fa una implementació més simple: el subíndex es referix a un desplaçament des de la posició inicial d'un vector, per lo que el primer element té un desplaçament de zero.
La referència a la memòria per una direcció i un desplaçament es representa directament en el hardware de computadora en pràcticament totes les arquitectura de computadores, per lo que este detall de disseny en C facilita la compilació, a costa d'alguns factors humans. En este context, usar «zero» com a ordinal no és estrictament correcte, pero és un hàbit estés en esta professió. Alguns llenguages de programació, com Fortran o COBOL, tenen subíndexs de vectores que comencen en un, perque varen ser dissenyats com a llenguages d'alt nivell, i com a tals devien correspondre als números ordinals usuals que precedixen a l'invenció del zero per molt temps. Alguns llenguages de programació, com Ada, ALGOL 60, PL/I, permeten un llímit inferior arbitrari per a cada índex.
Pascal permet que el ranc d'un vector siga de qualsevol tipo ordinal (inclosos tipos enumerats) i Ada permet qualsevol subtipo discret. APL permet establir l'orige de l'índex en 0 o 1 durant el temps d'eixecució de manera programàtica.[9][10] Alguns llenguages recents, com Lua i Visual Basic, han adoptat la mateixa convenció per la mateixa raó.
Zero és el valor sancer sense signe més baix, un dels tipos més fonamentals en programació i disseny d'hardware. En ciències de la computació, el zero s'usa a sovint com el cas base para molts tipos de recursión numèrica. Les proves i atres tipos de raonament matemàtic en ciències de la computació a sovint comencen en zero. Per estes raons, en ciències de la computació no és inusual numerar des de zero en lloc d'un.
Si un vector s'usa per a representar un cicle, és convenient obtindre l'índex en una operació mòdul, que pot resultar en zero.
Propietats numèriques
[editar | editar còdic]En la numeració des de zero, un ranc pot expressar-se com l'interval semiabierto, [0, n), en contraposició a l'interval tancat, [1, n]. Els rancs buits, que a sovint ocorren en algoritmes, són complicats d'expressar en un interval tancat sense recórrer a convencions obtuses com [1, 0]. Per esta propietat, la indexación des de zero potencialment reduïx els errors per un i de poste.[8] Per un atre costat, el conteo de repeticions n es calcula de bestreta, lo que fa que l'us del conteo de 0 a n − 1 (inclusivo) siga menys intuïtiu. Alguns autors preferixen la indexación des d'un, ya que correspon més estretament a cóm les entitats s'indexen en atres contexts.[11]
Una atra propietat d'esta convenció és en l'us de l'aritmètica modular com s'implementa en les computadores modernes. Usualment, l'operació mòdul mapea qualsevol sancer mòdul N a un dels números 0, 1, 2, ..., N − 1, a on N ≥ 1. Per açò, moltes fòrmules en algoritmes (com la que calcula índexs de taules hash) poden expressar-se elegantment en còdic usant l'operació mòdul quan els índexs de vectores comencen en zero.
Les operacions en busques també poden expressar-se més elegantment en un índex des de zero per la llògica subjacent de direcció/desplaçament mencionada anteriorment. Per a ilustrar, supongam que a és la direcció de memòria del primer element d'un vector, i i és l'índex de l'element desijat. Per a calcular la direcció de l'element desijat, si els números d'índex conten des d'1, la direcció desijada es calcula en esta expressió:
a on s és el tamany de cada element. En canvi, si els números d'índex conten des de 0, l'expressió es convertix en
Esta expressió més simple és més eficient per a calcular en temps d'eixecució.
No obstant, un llenguage que desige indexar vectores des d'1 podria adoptar la convenció de que cada direcció de vector es representa per a′ = a – s; és dir, en lloc d'usar la direcció del primer element del vector, dit llenguage usaria la direcció d'un element fictici ubicat immediatament abans del primer element real. L'expressió d'indexación per a un índex des d'1 seria llavors
Per lo tant, el benefici d'eficiència en temps d'eixecució de la indexación des de zero no és inherent, sino un artefacte de la decisió de representar un vector en la direcció del seu primer element en lloc de la direcció de l'element fictici zero. No obstant, la direcció d'eixe element fictici podria molt ben ser la direcció d'algun atre element en la memòria no relacionat en el vector.
Superficialment, l'element fictici no escala be a vectores multidimensionales. La indexación de vectores multidimensionales des de zero fa que una conversió (contigua) ingènua a un espai de direccions llineal (variant sistemàticament un índex darrere un atre) semble més simple que quan s'indexa des d'un. Per eixemple, al mapear el vector tridimensional A[P][N][M] a un vector llineal L[M⋅N⋅P], abdós en M ⋅ N ⋅ P elements, l'índex r en el vector llineal per a accedir a un element específic en L[r] = A[z][i][x] en indexación des de zero, és dir, [0 ≤ x < P], [0 ≤ i < N], [0 ≤ z < M], i [0 ≤ r < M ⋅ N ⋅ P], es calcula per
Organisant tots els vectores en índexs des d'1 ([1 ≤ x′ ≤ P], [1 ≤ i′ ≤ N], [1 ≤ z′ ≤ M], [1 ≤ r′ ≤ M ⋅ N ⋅ P]), i assumint un vector anàlec dels elements, dona
per a accedir al mateix element, lo que podria semblar més complicat. Per supost, r′ = r + 1, ya que [z = z′ – 1], [i = i′ – 1], i [x = x′ – 1]. Un eixemple simple i quotidià és la notació posicional, que l'invenció del zero va fer possible. En la notació posicional, les decenes, centenes, millers i tots els demés dígits comencen en zero, solament les unitats comencen en un.[12]
-
Índexs des de zero Plantilla:Diagonal split header 0 1 2 .. Plantilla:Tmath .. 8 9 0 00 01 02 08 09 1 10 11 12 18 19 2 20 21 22 28 29 .. Plantilla:Tmath 1=i Referències
[editar | editar còdic]- ↑ (1965) An Introduction to Object-Oriented Programming in C++ with Applications in Computer Graphics, 2ª edició (en en), British Library: Springer, p. 391. ISBN 1852334509.
- ↑ Steve Eddins i Loren Shure. «Matrix Indexing in MATLAB» (en en). Consultat el 20 de setembre de 2025.
- ↑ «How to: Get Elements of Lists» (en en). Wolfram. Consultat el 20 de setembre de 2025.
- ↑ «Indexing Arrays, Matrius, and Vectors» (en en). Maplesoft. Consultat el 20 de setembre de 2025.
- ↑ Martin Richards (1967). The BCPL Reference Manual (en en), Massachusetts Institute of Technology, p. 11.
- ↑ 6,0 6,1 6,2 Mike Hoye. «Citation Needed» (en en). Consultat el 20 de setembre de 2025.
- ↑ Tom Van Vleck. «The IBM 7094 and CTSS» (en en). Consultat el 20 de setembre de 2025.
- ↑ 8,0 8,1 «Why numbering should start at zero (EWD 831)» (en en). E. W. Dijkstra Archive. Universitat de Texas en Austin. Consultat el 20 de setembre de 2025.
- ↑ ACM SIGAPL APL Quote Quad.9(2)doi:10.1145/586050.586053.
- ↑ «Is Index Origin 0 a Hindrance?» (en en). JSoftware. Consultat el 20 de setembre de 2025.
- ↑ Programming Microsoft® Visual C# 2005 de Donis Marshall.
- ↑ Ix KhanNumber grid / Counting / Early Math / Khan Academy.Khan Academy.Consultat el 20 de setembre de 2025.
- Este artícul conté una traducció derivada de «Numeración desde cero» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.