アーカイブ: 2008年3月06日
32bit整数値の限界値
ことだまです。
32bit整数値の限界値はどのくらいだろ?
と言うことで考えてみました。
で、32bitのうち1bitは正負(±)に使用するので、実質使えるbit数は31bit。
で、実際に使える数値は
2^31-1 で2147483647
2147483647が32bit整数で扱える限界値。
Google電卓で出しましたw
じゃあ、符号無し整数は?
2^32-1で4294967295
で32bitの限界で問題が起こりそうな事ってないのかなぁ〜っと検索してみました。
NTPで32bitの整数限界値で問題がおこるようです。
2036年問題
NTPでは、時刻の表現に1900年1月1日 午前0時0分0秒 (UTC) (この時間を以下では「起点」とする)からの積算秒数を使用している。この値は32ビット符号なしで表現されるため、起点から(232-1)秒、すなわち42億9496万7295秒までしか表現できない。
その結果、起点から42億9496万7295秒経過した2036年2月6日 6時28分15秒 (UTC) の次の秒(16秒)が桁あふれによって起点と認識されてしまい、NTPが誤動作すると予想されている。
これが2036年問題である。UNIX(Linux, FreeBSD等UNIXライクなOSも含む)にはこの問題が複数の箇所で今後顕在するとみられるが(例:2038年問題)、このNTPについても該当する。
2036年までに64bitに移行してください。
もしくは符号無し整数で(笑