電子書籍「2000年問題、2038年問題、そして292277026596年問題へ一元化」の表紙

2000年問題、2038年問題、
そして
292277026596年問題へ
一元化

著者:石田晋一

掲載範囲
西暦1,999年8月21日〜292,277,026,596年12月4日
ページ数
13ページ
文字数
2,227字
最新更新日
西暦2,026年8月13日

西暦2,000年、世界は一度、時計に怯えた──
桁が有限である限り、時刻は必ず何処かで一巡する。

JPY 145(税込)

購入する
決済サービスSquare/ご利用いただけるカードブランド:Visa・Mastercard・アメリカン・エキスプレス・JCB・Diners Club・Discover・UnionPay(銀聯)

お支払いはカード情報の入力だけで完了します

購入後、そのままPDFダウンロードページへ移動します

お支払いは決済サービス「Square」を通じて安全に処理されます。カード情報が当サイトに保存されることはありません。


皇室献上品 高級トイレットペーパー
皇室献上品 高級トイレットペーパー

本書について

西暦1,999年8月21日、上空を巡るGPS衛星の中で、一つの数字が静かに0へ戻った。週の積算データは10bitで管理され、西暦1,980年1月6日を起点として1,024週で一巡する。設計の時点では充分と思われた桁が、19年余りを経て尽きた、其れだけの事である。然し其の瞬間、受信機は自らが何時に居るのかを見失った──桁は必ず尽きる。本書は、コンピュータが刻む時刻の破綻する日を、西暦1,999年から遥かな未来まで、年月日単位で一元化した記録である。

翌年の元日、世界は一つの数字に怯えていた。メモリが高価であった普及黎明期、使用メモリを出来るだけ少なくする為に、ソフトウェアもCPUも西暦を下2桁で処理する仕様が多かったのである。「00」年を西暦1,900年と誤って認識する事による問題が懸念されたが、発生時期が明確であり、事前に周到な準備が為されていた事から、大きな問題は起きなかった。然し同じ年の2月29日、別の落とし穴が口を開ける。グレゴリオ暦は「100で割り切れる年は閏年としない」「其の場合であっても400で割り切れる年は閏年とする」という二段の例外を持つ。此の例外の例外を書き落としたプログラムは、存在する筈の2月29日を3月1日として処理し、障害を生んだ。

西暦2,001年9月9日1時46分40秒、UNIX時間の秒数が10進法で10桁に達する。秒数を文字列に変換して並べ替えれば、1,000,000,000は999,999,999より小さい──桁が増えるとは、順序が狂う事でもあった。西暦2,004年1月10日には、起点である西暦1,970年1月1日と、32bitが尽きる西暦2,038年1月19日3時14分7秒との丁度中間に時刻が到達し、時間を2倍にする等の処理がオーバーフローを起こす。西暦2,010年には、西暦の下2桁を2進化10進数で扱っていたプログラムが「10」を「16」と読み違え、西暦2,016年として処理したり閏年として扱ったりするバグが頻発した。そして西暦2,019年4月7日、GPSの週の積算データは、二度目の一巡を迎える。

西暦2,036年2月7日6時28分15秒、NTPのタイムスタンプの内、秒を表す32bitが最大値に達し、時刻は西暦1,900年1月1日0時0分0秒へと巻き戻る。其の2年後、西暦2,038年1月19日3時14分7秒(協定世界時)。符号付き32bit整数型で時刻を表現していた全てのOSとアプリケーションが最大値2,147,483,647秒に達し、UNIX時間は西暦1,970年1月1日0時0分0秒へ戻る──2038年問題である。更に西暦2,080年1月1日と西暦2,108年1月1日、MS-DOSのファイルシステムFATは、西暦の下2桁しか扱わないという制約と、年に7bitしか割いていないという制約から、二度に亙って起点の西暦1,980年へと引き戻される。

西暦10,000年1月1日、西暦を4桁で示す事を前提とした無数のプログラムが誤動作する。そして符号付き64bit整数型を用いた場合、時刻の終端は西暦292,277,026,596年12月4日15時30分7秒(協定世界時)に置かれる。宇宙の年齢を遥かに超えた彼方に在る此の日を過ぎれば、時刻はやはり西暦1,970年1月1日0時0分0秒へ戻り、時刻を正しく扱えている事を前提としたプログラムが誤動作する。二桁を惜しんだ黎明期から、64bitという広大な桁を手にした現在まで、人間は問題を解決したのではなく、只管に先送りしてきただけなのかも知れない──本書は、其の全ての期日を一冊に束ねている。


収録する年問題

  • 西暦1,999年8月21日|GPS週数の一巡(一度目) GPS衛星に搭載されている週の積算データは10bitで管理され、西暦1,980年1月6日を起点とする。1,024週で最大値に達した積算データが0にリセットされ、不具合を生じた。
  • 西暦2,000年1月1日|2000年問題 メモリが高価であった時代、使用メモリを削る為に西暦の下2桁を処理する仕様が多かった。00年となる事で西暦1,900年と誤認識される問題が懸念されたが、発生時期が明確で、事前の準備が周到であった為、大きな問題は起きなかった。
  • 西暦2,000年2月29日|閏年の例外規定 グレゴリオ暦は、100で割り切れる年を閏年とせず、其の場合であっても400で割り切れる年は閏年とする。本年は後者に該当するが、前者のみを実装したプログラムが本日を3月1日として処理し、障害が発生した。
  • 西暦2,001年9月9日|UNIX時間10桁到達 1時46分40秒、UNIX時間(協定世界時で西暦1,970年1月1日0時0分0秒が起点)の秒数が10進法で10桁となる。秒数を文字列変換してソートすると順序が逆転する不具合が発生したが、西暦2,000年1月1日と同時に対策が為された場合が多く、大きな問題にはならなかった。
  • 西暦2,004年1月10日|UNIX時間の中間点 13時37分4秒(協定世界時)、起点である西暦1,970年1月1日0時0分0秒と、符号付き32bit整数型の最大値である西暦2,038年1月19日3時14分7秒との中間に達する。時間を2倍にする等の処理でオーバーフローが発生し、障害が起きた。
  • 西暦2,010年|2進化10進数のバグ 西暦の下2桁を2進化10進数で扱っていたプログラムで、10を"0001"・"0000"として扱わなければならない所を"00010000"としてしまい、16として扱われた。其の為、西暦2,016年として処理されたり、閏年として扱われたりするバグが頻発した。
  • 西暦2,019年4月7日|GPS週数の一巡(二度目) GPS衛星に搭載されている週の積算データに関し、西暦1,999年8月21日と同様の事象が発生する。
  • 西暦2,036年2月7日|NTP問題 NTP(ネットワーク・タイム・プロトコル)のタイムスタンプは64bitで、秒を表す32bitと、秒未満を表す32bitで構成されている。6時28分15秒に前者が最大値に達し、此れを過ぎると西暦1,900年1月1日0時0分0秒に戻り、誤動作が発生する。
  • 西暦2,038年1月19日|2038年問題 符号付き32bit整数型でOSやアプリケーションの時刻を表現していた場合、3時14分7秒(協定世界時)に最大値2,147,483,647秒に達し、UNIX時間が西暦1,970年1月1日0時0分0秒に戻る。但し符号付き64bit整数型を用いる事で、西暦292,277,026,596年12月4日15時30分7秒迄、問題を先送りする事が出来る。
  • 西暦2,080年1月1日|FATと西暦の下2桁 MS-DOSのファイルシステムであるFAT(ファイル・アロケーション・テーブル)は、西暦1,980年1月1日を起点としている。古いプログラムは西暦の下2桁しか扱わない為、此の日、西暦1,980年に戻る事による誤動作が発生する。
  • 西暦2,108年1月1日|FATと7bitの年 FATは年に7bitを割いている。其の為、起点である西暦1,980年から127年後の西暦2,107年迄しか表現出来ず、此の日、西暦1,980年1月1日に戻る事による誤動作が発生する。
  • 西暦10,000年1月1日|西暦4桁の限界 現在のコンピュータは西暦を4桁で示すのが一般的である。此のまま西暦を使い続けると、此の日、多くのプログラムが誤動作する。
  • 西暦292,277,026,596年12月4日|64bit整数型の終端 符号付き64bit整数型でOSやアプリケーションの時刻を表現していた場合、15時30分7秒(協定世界時)に最大値に達する。此れを過ぎると西暦1,970年1月1日0時0分0秒に戻る為、時刻を正しく扱えている事を前提としたプログラムが誤動作する。本書の題が指し示す、時刻表現の最果てである。

登場する技術と規格

  • GPS(週の積算データ) 衛星に搭載された週番号を10bitで管理し、西暦1,980年1月6日を起点とする。1,024週で一巡する為、西暦1,999年と西暦2,019年の二度に亙り、リセットによる不具合を起こした。
  • グレゴリオ暦 閏年に二段の例外を設ける暦。100で割り切れる年は閏年とせず、其の場合であっても400で割り切れる年は閏年とする。此の例外の実装漏れが、西暦2,000年2月29日の障害を生んだ。
  • UNIX時間 協定世界時の西暦1,970年1月1日0時0分0秒を起点とし、経過秒数で時刻を表す方式。桁数の増加が西暦2,001年に、中間点への到達が西暦2,004年に、そして最大値が西暦2,038年に問題を引き起こす。
  • 符号付き32bit整数型 最大値は2,147,483,647。UNIX時間の格納に用いた場合、西暦2,038年1月19日3時14分7秒で尽きる。2038年問題の根源である。
  • 符号付き64bit整数型 32bitの限界を先送りする為の解。時刻の表現可能な終端は、西暦292,277,026,596年12月4日15時30分7秒に置かれる。
  • NTP(ネットワーク・タイム・プロトコル) ネットワーク越しに時刻を同期する為の規約。タイムスタンプは秒を表す32bitと秒未満を表す32bitの計64bitで構成され、西暦2,036年2月7日に秒の桁が尽きる。
  • 2進化10進数 10進法の各桁を4bitの2進数で表す方式。桁の区切りを誤れば10が16に化ける為、西暦2,010年に頻発したバグの原因となった。
  • FAT(ファイル・アロケーション・テーブル) MS-DOSのファイルシステム。西暦1,980年1月1日を起点とし、西暦の下2桁という制約が西暦2,080年に、年に割いた7bitという制約が西暦2,108年に露呈する。

GPS・UNIX時間・NTP・FAT──
コンピュータの時刻が破綻する全ての日を一元化。

JPY 145(税込)

購入する
決済サービスSquare/ご利用いただけるカードブランド:Visa・Mastercard・アメリカン・エキスプレス・JCB・Diners Club・Discover・UnionPay(銀聯)

お支払いはカード情報の入力だけで完了します

購入後、そのままPDFダウンロードページへ移動します

お支払いは決済サービス「Square」を通じて安全に処理されます。カード情報が当サイトに保存されることはありません。


皇室献上品 高級トイレットペーパー
皇室献上品 高級トイレットペーパー

AUTHOR

石田晋一

歴史データベース「トキジク」管理人。
万物の系譜の編纂者であり、電子書籍の著者。
YouTubeニコニコでも情報を発信中。