- PR -

西暦2038年問題

投稿者投稿内容
とんび
常連さん
会議室デビュー日: 2003/07/11
投稿数: 32
投稿日時: 2004-02-04 02:53
引用:

Jittaさんの書き込み (2004-02-03 08:17) より:
 5〜6年前までUNIX系を使っていた人ならご存じのはずですが。

 「時間」を、1970年1月1日午前0時0分0秒から経過秒数で持っているため、4バイト(符号1ビット)では2038年中に桁が足りなくなるということです。Solarisのいつ頃からかは対応してあるはずだけど。。。


対策ってどうやってるんでしょう。まあ、Solarisが動いてるのはほとんど64ビットマシンでしょうから問題はないのでしょうが。
32ビットマシンだと、C言語の標準関数いじるか、独自のライブラリを利用するとかしないかぎり、対策出来ないと思うのですが。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-02-04 06:45
引用:

とんびさんの書き込み (2004-02-04 02:53) より:
32ビットマシンだと、C言語の標準関数いじるか、独自のライブラリを利用するとかしないかぎり、対策出来ないと思うのですが。


time_t型は、型そのものが実装に依存するものとして定められているので
問題が起こらないように実装すればすむ話です。
# いや、その「実装」が問題なんだけど
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-04 08:35
引用:

ぽんすさんの書き込み (2004-02-04 06:45) より:

time_t型は、型そのものが実装に依存するものとして定められているので
問題が起こらないように実装すればすむ話です。
# いや、その「実装」が問題なんだけど


 単純には、unsigned longに書き替えてカーネルを再構築してやれば、先送りできる・・・のかな?
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-04 10:02
ども、ほむらです。
--------
なか-chan氏へ
引用:

作った当時はそんなに長く使われると思っていなかったんでしょうかね?
人が作るものだから完璧はありえないとしても、ちょっと間違えば怖いですね。


たしか、2000年問題の発端がこれらしいですね。
そんなに長く使われるとは誰も思わなかった。と

MS−DOSの元になったOSから考えたらかなり長い歴史ですからね〜。

#32ビットマシンでの有効な対策
#リプレース(笑

たしか、日付の計算方法を変えるという動きが一時期あったらしいのですけど
あれは気のせいだったのかな?
それで2038年問題はなくなるとか。。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-02-04 12:45
引用:

たしか、2000年問題の発端がこれらしいですね。
そんなに長く使われるとは誰も思わなかった。と


実は、1999年くらいにPerlでCGIをバカスカ書いていたんですが、思いっきり2000年問題に
引っかかるようなコードを書いてました
結局、「そんなに長く使われるとは誰も思わなかった」と言うと聞こえは良いですが、
「そんなところ気にしてなかった」もしくは「2000年になると問題が起こるなんて微塵も
考えてなかった」というところが本音かもしれません

# 件の2000年問題に引っかかるコードは、もちろん全部直しました
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-09 10:54
引用:

ほむらさんの書き込み (2004-02-04 10:02) より:

なか-chan氏へ
引用:

作った当時はそんなに長く使われると思っていなかったんでしょうかね?
人が作るものだから完璧はありえないとしても、ちょっと間違えば怖いですね。


たしか、2000年問題の発端がこれらしいですね。
そんなに長く使われるとは誰も思わなかった。と


 B.G.氏ですか?「32KBもあればじゅうぶんだろう」
 未だにCOBOLが使われているのも、その他の言語では桁数の問題があるからなのでしょうね。「これだけ有効桁数があれば十分だろう」。.NETのDecimal型で14桁。アメリカの国家予算は15桁(100兆)必要で無いかい?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-02-09 13:09
引用:

.NETのDecimal型で14桁。アメリカの国家予算は15桁(100兆)必要で無いかい?


むかし、Cを習いたての頃に「組み込み型の有効数字を超えて計算する方法」として、
int型のメンバを二つ持つ構造体を定義し、それを使って多桁計算を行う四則演算を
定義したりしていました。アルゴリズムの本とか読むと普通に出てますよね。

もはや、MyBigIntegerとかを定義するしかないかと。

# ワードサイズが64bitだと、intは4バイト、longは8バイト、となるのだろうか、、、
きよの
常連さん
会議室デビュー日: 2004/02/07
投稿数: 34
投稿日時: 2004-02-09 13:21
引用:

Jittaさんの書き込み (2004-02-09 10:54) より:
.NETのDecimal型で14桁。アメリカの国家予算は15桁(100兆)必要で無いかい?



.NET の decimal 型(Decimal クラス)はヘルプによると 128ビットで有効桁数が 28〜29桁あるようですが?
テストしてみたところ10桁×10桁の計算(結果は20桁)は正しく計算されました。

スキルアップ/キャリアアップ(JOB@IT)