PSYの「江南スタイル」がYouTubeでカンスト、から学ぶ32ビットと64ビット
一世を風靡した、韓国のアーティストPSYの「江南スタイル」。
このPSYがアップロードしたYouTubeのミュージックビデオは想定外の再生回数をカウントし、カウンターでエラーが出る事態となりました。情報の授業で習う「ビット」が増えることの意味を理解する助けになります。
今回、「江南スタイル」は、21億4748万3647回という32ビットの符号付き整数で数えられる数字を超えたため、エラーとなったそうです。(※タイトルの「カンスト」は「カウンターストップ」(Wikipedia)の略です。)
・'Gangnam Style' breaks YouTube - CNN.com
ビット(bit)はバイナリー・デジットの略。バイナリーは2進数のことなので、ビット数は2進数を何桁数えられるかが決まります。ビットは「0」と「1」で表すため、1ビットで数えられるのは1まで(0と1)。2ビットは3まで、3ビットは7まで、8ビットは255まで数えられます。
よく、ファミコンのゲームで、ヒットポイントなどのパラメータの上限が127や255になっているのを見かけましたが、何ビット分をその数値に割いているかで決まっていたことが分かります。
さて32ビットで数えられるのは42億9496万7295までですが、「符号付き」というのはプラス・マイナスを表すため、2進数で1桁少なくなり、10進数では半分の数字である21億4748万3647が上限、ということになります。
32ビット符号付き整数の場合、21億4748万3647、つまり2進数で下31桁がすべて「1」になり、1桁繰り上がると、32桁目が「1」となります。この「1」はマイナスを意味しエラーが発生した、というわけです。
YouTubeはGoogle+で、「想定外だった」とコメントした上で、YouTubeの再生カウンターを32ビットから64ビットにカウンターを改修したことを発表しました。これにより、カウントできる数は922京3372兆0368億5477万5808回になりました。
おそらく、この数を超える再生数を稼ぐビデオは現れないでしょう。
32ビットにまつわる「2038年問題」とは?
これに関連して、32ビット、64ビットの話題をいくつか。
昨今は、パソコンのみならず、スマートフォンも64ビットプロセッサを採用が進んでいます。先陣を切ったのはAppleが2013年に発売したiPhone 5sで、搭載するA7プロセッサが64ビット対応でした。
前述の説明で、カウントできる数が大幅に増えた事から分かる通り、64ビットプロセッサは、扱うことができるメモリ容量が大幅に増えることと、1度に処理するデータのサイズも2倍になります。
今まで、プロセッサはクロック周波数(1秒間の演算の回数)を高めることで高速化しましたが、モバイル中心のコンピューティングになると、バッテリ消費を犠牲にすることになり、得策ではありません。そこで64ビット化によって、クロックを挙げる(消費電力を高める)事なく、処理性能を向上させる方針へと向かうようになりました。
この32ビットでコンピュータが引き起こす問題に「2038年問題」があります。
過去に経験した「2000年問題」は、10進数で西暦を2桁で表現していた事に起因する問題でした。99年(1999年)の次は00年になり、これが2000年と解釈されれば良いのですが、もし1900年と解釈されると、時間の不整合が起き、トラブルの原因となります。
2038年問題の場合、こんどは2進数で同じ事が起きる、と考えれば分かりやすいのではないでしょうか。
サーバなどに利用されている「UNIX」の時間は、1970年1月1日0時0分0秒から32ビット符号付き整数でとして1秒ずつカウントています。ここまで書けば、PSYのビデオと同じ事が一部のコンピュータで起きる可能性があることが分かりますよね。
つまり1970年の元旦から21億4748万3647秒が経過する2038年1月19日3時14分7秒を過ぎると、時間がマイナスとなり、プログラムが問題を引き起こす可能性がある、というわけです。2000年問題より深刻とみられているのは、アプリの改修ではなく、その土台となるシステムや言語処理に関わるから。
そして、察しの良い方は、解決方法もおわかりですね。時間のカウントを64ビットに変えれば西暦3000億年まで問題を先送りにでき、事実上解決したとみて良いでしょう。
もし64ビットに変えられない場合は、32ビット符号付き整数から、単なる32ビット整数として扱うよう変更します。2106年3月に再び同じ問題が起きてしまいますが、2038年問題は回避できると考えられています。