ゼロベース番号付けとは、日常的な非数学的または非プログラミングの状況で一般的に使用されるインデックス 1 ではなく、シーケンスの最初の要素にインデックス0を割り当てる番号付け方法です。ゼロベース番号付けでは、最初の要素は、最初の要素ではなく、ゼロ番目の要素[ 1 ]と呼ばれることがあります。ゼロは、序数ゼロを表す造語 です。場合によっては、特定のシーケンスに(元々は)属していないが、その最初の要素の前に自然に配置できるオブジェクトまたは値を、ゼロ番目の要素と呼ぶことがあります。ゼロを序数として使用すること(およびゼロ番目の用語の使用)の正しさについては、文脈がない場合にシーケンスのすべての後続要素に曖昧さが生じるため、広く合意されていません。
数列に 0 から番号を付ける方法は、特に組み合わせ論では数学の表記法でよく見られますが、数学用のプログラミング言語では通常1からインデックスを付けます。 [ 2 ] [ 3 ] [ 4 ]コンピュータサイエンスでは、現代のプログラミング言語では配列のインデックスは通常 0 から始まるため、コンピュータプログラマーは、他の人がfirst を使うような状況でzeroth を使うことがあります。数学の文脈によっては、順序形式がfirst の前に来る明らかな候補を持つ明確な意味を持っている場合、0 ベースの番号付けを混乱なく使用できます。たとえば、関数の0 階微分は、0 回微分して得られる関数そのものです。このような使用法は、数列に正しく属していないが数列の前に来る要素に名前を付けることに対応します。つまり、0 階微分は実際には微分ではありません。しかし、1 階微分が2 階微分の前に来るのと同様に、0 階微分(または元の関数自体)も1 階微分の前に来ます。
BCPL言語( C言語の前身)の作成者であるマーティン・リチャーズは、アドレスとして使用されるポインタpの値がメモリ内の位置p +0にアクセスするため、言語内で配列の内容にアクセスし始める自然な位置として、0から始まる配列を設計しました。[ 5 ] [ 6 ] BCPLは最初にIBM 7094向けにコンパイルされました。この言語は実行時間接参照ルックアップを導入しなかったため、これらの配列によって提供される間接参照の最適化はコンパイル時に行われました。[ 6 ]それでも最適化は重要でした。[ 6 ] [ 7 ]
1982年、エドガー・W・ダイクストラは、関連する論文「なぜ番号付けはゼロから始めるべきなのか」[ 8 ]の中で、配列の添え字はゼロから始めるべきであると主張した。ゼロは最も自然な数だからである。彼は、連鎖不等式で配列範囲を囲むことで可能な配列範囲の設計について議論し、厳密な不等式と標準的な不等式を組み合わせて4つの可能性を示し、ゼロベースの配列は、実数と同様に、開区間、半開区間、閉区間を暗示する、ゼロから始まる重複しないインデックス範囲によって最もよく表現されることを確信している。ダイクストラがこの慣習を好む理由として、具体的には、閉じた「区間」( a ≤ i ≤ ( a − 1) ? ) よりも、空のシーケンス( a ≤ i < a ? ) をより自然な方法で表現できること、そして自然数の半開「区間」では、部分シーケンスの長さが上限から下限を引いた値に等しいこと ( a ≤ i < bはiに対して( b − a )個の可能な値を与え、a、b、i はすべて整数) を挙げている。
この用法は、 C、Java、Lispなど、多くの影響力のあるプログラミング言語に組み込まれた設計上の選択に由来します。これら3つの言語では、シーケンス型(C言語の配列、Javaの配列とリスト、Lispのリストとベクトル)は、添え字0から始まるインデックスで表されます。特にC言語では、配列がポインタ演算と密接に結びついているため、この方が実装が簡単になります。添え字は配列の開始位置からのオフセットを表すため、最初の要素のオフセットは0になります。
アドレスとオフセットによるメモリの参照は、ほぼすべてのコンピュータアーキテクチャでコンピュータハードウェアに直接表現されるため、C言語のこの設計上の詳細は、多少の人的要因を犠牲にしてコンパイルを容易にします。この文脈では、「ゼロ」を序数として使用することは厳密には正しくありませんが、この業界では広く使われている習慣です。FortranやCOBOLなどの一部のプログラミング言語は、高水準プログラミング言語として設計されていたため、配列の添え字が1から始まります。そのため、ゼロの発明よりずっと前に存在した通常の序数に対応する必要がありました。また、 Ada、ALGOL 60、PL/Iなどの一部のプログラミング言語では、各インデックスに任意の下限を設定できます。
Pascal では配列の範囲を任意の順序型 (列挙型を含む) にすることができ、Ada では任意の離散サブタイプにすることができます。APLでは実行時にプログラムでインデックスの原点を 0 または 1 に設定することができます。[ 9 ] [ 10 ] LuaやVisual Basicなどの最近の言語では、同じ理由で同じ慣習を採用しています。
ゼロは符号なし整数の最小値であり、プログラミングやハードウェア設計において最も基本的な型の1つです。そのため、コンピュータサイエンスでは、ゼロは多くの種類の数値再帰の基底ケースとしてよく用いられます。コンピュータサイエンスにおける証明やその他の数学的推論は、しばしばゼロから始まります。こうした理由から、コンピュータサイエンスでは1ではなくゼロから番号を振ることは珍しくありません。
配列がサイクルを表すために使用される場合、モジュロ関数を使用してインデックスを取得すると便利ですが、その結果はゼロになる可能性があります。
ゼロベースの番号付けでは、範囲は閉区間 [1, n] ではなく、半開区間[ 0 , n )として表現できます。アルゴリズムでよく発生する空の範囲は、 [1, 0]のような分かりにくい慣習に頼らずに閉区間で表現するのは困難です。この特性により、ゼロベースのインデックス付けは、オフバイワンエラーやフェンスポストエラーを減らす可能性があります。[ 8 ]一方、繰り返し回数nは事前に計算されるため、0 からn − 1 (含む)までカウントする方法は直感的ではありません。一部の著者は、他のコンテキストでエンティティがインデックス付けされる方法により近いことから、1 ベースのインデックス付けを好みます。[ 11 ]
この規約のもう一つの特徴は、現代のコンピュータで実装されているモジュロ演算の使用です。通常、モジュロ関数は、N を法とする任意の整数を0、1、2、...、N − 1のいずれかの数にマッピングします ( N ≥ 1 )。このため、配列インデックスがゼロから始まる場合、アルゴリズム (ハッシュテーブルのインデックスを計算する式など) の多くの式を、モジュロ演算を使用してコードで簡潔に表現できます。
ポインタ操作は、前述のアドレス/オフセットロジックのおかげで、ゼロベースのインデックスに対してより簡潔に表現することもできます。例として、a が配列の最初の要素のメモリ アドレス、iが目的の要素のインデックスであるとします。インデックス番号が 1 から始まる場合、目的の要素のアドレスは次の式で計算されます。
ここで、sは各要素のサイズです。対照的に、インデックス番号が 0 から始まる場合、式は次のようになります。
このより単純な式は、実行時に計算するのに効率的です。
しかし、配列を1からインデックス付けしたい言語では、すべての配列アドレスをa ′ = a – sで表すという慣例を採用することができます。つまり、最初の配列要素のアドレスを使用する代わりに、そのような言語では、最初の実際の要素の直前に位置する仮想要素のアドレスを使用します。1から始まるインデックスのインデックス式は次のようになります。
したがって、実行時におけるゼロベースインデックスの効率性向上は本来的なものではなく、配列を仮想的なゼロ番目の要素のアドレスではなく、最初の要素のアドレスで表現するという決定の結果生じるものです。しかし、その仮想的な要素のアドレスは、配列とは無関係なメモリ内の別の項目のアドレスである可能性も十分にあります。
表面的には、この仮想要素は多次元配列にはうまく対応できません。多次元配列をゼロからインデックス付けすると、線形アドレス空間への単純な(連続的な)変換(インデックスを順番に体系的に変化させる)が、1からインデックス付けする場合よりも簡単に見えます。たとえば、3次元配列A[ P ][ N ][ M ]を、どちらもM ⋅ N ⋅ P個の要素を持つ線形配列L[ M⋅N⋅P ]にマッピングする場合、ゼロベースのインデックス付けでL[ r ] = A[ z ][ y ][ x ]となる特定の要素にアクセスするための線形配列のインデックスrは、 [0 ≤ x < P ]、[0 ≤ y < N ]、[0 ≤ z < M ]、および[0 ≤ r < M ⋅ N ⋅ P ]で計算されます。
1 から始まるインデックス ( [1 ≤ x′ ≤ P ]、[1 ≤ y′ ≤ N ]、[1 ≤ z′ ≤ M ]、[1 ≤ r′ ≤ M ⋅ N ⋅ P ] ) で全ての配列を整理し、要素の同様の配置を仮定すると、
同じ要素にアクセスするには、より複雑に見えるかもしれません。もちろん、[ z = z ′ – 1]、[ y = y ′ – 1]、 [ x = x ′ – 1]なので、 r ′ = r + 1です。シンプルで日常生活の例としては、ゼロの発明によって可能になった位取り記数法があります。位取り記数法では、十の位、百の位、千の位、その他のすべての桁はゼロから始まり、一の位のみが1から始まります。[ 12 ]
この状況は用語の混乱を招く可能性があります。ゼロベースのインデックス方式では、最初の要素は「要素番号ゼロ」であり、同様に、12番目の要素は「要素番号11」です。したがって、序数から番号付けされたオブジェクトの数への類推が生じます。n個のオブジェクトの最大のインデックスはn - 1であり、これはn番目の要素を指します。このため、混乱を避けるために、最初の要素はゼロ番目の要素と呼ばれることがあります。
数学では、多くの数列や多項式列は非負の整数によってインデックス付けされます。たとえば、ベルヌーイ数やベル数などです。
力学と統計学の両方において、ゼロ次モーメントが定義されており、物理密度の場合は総質量、確率分布の場合は総確率、つまり1を表します。
熱力学の第零法則は、第一法則、第二法則、第三法則の後に定式化されたが、より根本的な法則と考えられたため、そのように名付けられた。
生物学では、生物が「何に対しても意図を全く示さない」場合、その生物はゼロ次意図性を持つと言われます。これには、生物の遺伝的に決定された表現型が、その生物が遺伝子を発現することを「意図」していなかったために、その生物自身に適応上の利益をもたらす状況も含まれます。[ 13 ]同様に、コンピュータも、実行するプログラムのコードを「意図」していないため、この観点からはゼロ次意図性を持つ実体とみなすことができます。[ 14 ]
生物学的または医学的実験では、実験の初日はしばしば0日目として数えられます。[ 15 ]
ほとんどの文化圏の人々にとって、ゼロから始まる数字の馴染み深い使用例は年齢です。赤ちゃんは生後1年間は0歳で、1年後の1歳の誕生日には1歳になります。対照的に、東アジアの多くの年齢計算方法は1から始まるもので、新生児には1歳が割り当てられます。[ 16 ]
『過去の世紀の残された兆候』[ 17 ] の中で、アル・ビールーニーはメトン周期の年数を0から18まで数えた。
広く使われているグレゴリオ暦やその前身であるユリウス暦には、紀元0年は存在しません。これらの暦体系では、紀元前1年の後に西暦1年が続きます。しかし、天文学的な年号(紀元前1年のユリウス暦と一致する)やISO 8601:2004(紀元前1年のグレゴリオ暦と一致する)には紀元0年が存在し、仏教暦やヒンドゥー暦にもすべて存在します。
多くの国では、建物の地上階 は「1階」ではなく「0階」とみなされます 。これは、アメリカ合衆国で一般的に見られる命名規則とは異なります。そのため、地下階は負の数で表され、一貫性のある階数体系となります。
序数0は主に数学、物理学、コンピュータ科学に直接関連する分野で使われますが、クラシック音楽にも例があります。作曲家アントン・ブルックナーは、初期のニ短調交響曲を自身の作品の正典に含めるに値しないと考え、楽譜にgilt nicht(「数えない」)と十字の付いた円を書き込み、「無効」という意味にしました。しかし、この作品は死後、交響曲第 0番ニ短調として知られるようになりましたが、実際には交響曲第 1番ハ短調の後に書かれたものです。ブルックナーにはさらに古いヘ短調交響曲があり、これは第 00番と呼ばれることもあります。ロシアの作曲家アルフレート・シュニトケも交響曲第 0番を作曲しました。
オックスフォード大学やケンブリッジ大学など一部の大学では、「第 0週」または「第0週」は、学期最初の講義週の前の週を指します。オーストラリアでは、一部の大学がこれを「O週」と呼んでおり、「オリエンテーションウィーク 」をもじったものです。同様に、スウェーデンの大学教育における導入週は、一般的に「nollning (ゼロイング)」と呼ばれています。
アメリカ空軍では毎週水曜日に基礎訓練が開始され、最初の週(全8週)は翌週の日曜日から始まるとされています。その日曜日の前の4日間は「ゼロ週」と呼ばれることがよくあります。
24時間制の時計と国際規格ISO 8601では、1日の最初の(0番目の)時間を0で表します。これは、1時間の最初の(0番目の)分と1分の最初の(0番目の)秒を0で表すのと一致するためです。また、日本で使用される12時間制の時計では、午前0時と正午の直後の時間を0で表します。これは、他の地域で12で表すのとは異なり、午前0時と午後0時が正午なのか午前0時なのかという混乱を避けるためです。
ロバート・クラムが『ザップ・コミックス』創刊号のために描いた絵が盗まれたため、彼は全く新しい号を描き、それを第 1号として出版した。その後、彼は盗まれた絵のコピーに再びインクを入れ、第 0号として出版した。
ベルギーのブリュッセル環状道路はR0という番号が付けられています。これはアントワープ環状道路の後に建設されましたが、首都であるブリュッセルにはより基本的な番号がふさわしいと判断されたためです。同様に、ハンガリーのブダペスト周辺の(未完成の)環状高速道路はM0と呼ばれています。
番地表示において、ゼロが使われることがある。特に、偶数番地が通りの片側、奇数番地が反対側となるような区分けの場合によく見られる。例えば、ハーバード・スクエアにあるクライスト・チャーチの住所はガーデン・ストリート0番地である。
かつてF1では、前年度の世界チャンピオンが翌シーズンに参戦しない場合、ナンバー 1はどのドライバーにも割り当てられず、世界チャンピオンチームのドライバーのうち1人がナンバー 0、もう1人がナンバー 2を着用していた。これは1993年と1994年に実際に起こり、前年度チャンピオンのナイジェル・マンセルが1992年以降に、前年度チャンピオンのアラン・プロストが1993年以降に引退したため、デイモン・ヒルが両シーズンともナンバー0を着用した。しかし、2014年にシリーズは、前年度チャンピオンが引き続きナンバー1を着用する選択肢がある以外は、チーム割り当ての番号ではなく、ドライバーがキャリアを通じて個人番号を着用する方式に移行した。そのため、このシナリオでは0は使用されなくなった。0がドライバーの選択番号として利用可能かどうか、または2から99の間でなければならないかどうかは不明だが、このシステムの下では現在まで使用されていない。
チームスポーツの中には、選手の背番号として(一般的な1~99の範囲に加えて)0を選ぶことが認められているものもある。NFLは2023年からこれを認めることを決定した。
シリーズの時系列上の前日譚は、例えば『リング 0: バースデイ』や『ゾーク ゼロ』のように、0 という番号が付けられることがあります。
スイス連邦鉄道では、特定の種類の鉄道車両に0番から118番までの番号を付けています 。
フィクションの世界では、アイザック・アシモフは最終的に自身のロボット三原則に第零法則を追加し、実質的に四つの法則とした。
標準的なルーレット盤には、0の他に1~36の数字が書かれています。0は緑色で表示されるため、賭けの際には「赤」にも「黒」にも分類されません。カードゲームのウノには、0から9までの数字カードと、各色のスートに特別なカードがあります。
フリーソフトウェアの4つの基本的自由は、0から番号が振られています。これは歴史的な理由によるものです。当初、このリストには3つの自由しか含まれていませんでしたが、4つ目の自由が追加された際に、より基本的な自由であると考えられたため、0番目の位置に置かれました。
タイトル: Number grid / Counting / Early Math / Khan Academy。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)