パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

2038年問題まであと8億秒」記事へのコメント

  • >「32ビットの符号付二進数の桁あふれ」という理由を理解するには、ある程度の専門知識を必要とする

    「とりあえず31ビットの二進数の桁あふれ」という説明で良いんじゃないの?
    残りの1ビットはどこへいった?と聞いてくる人がいたら、それは符号ビットだよと答えれば良いし、そう質問する人はそういう説明を理解出来る人だろうからそれでいいでしょ

    • Re: (スコア:4, 参考になる)

      実はそれに加えてプログラミングに関する専門知識が必要です。C言語標準の場合、符号付整数の桁あふれは、未定義動作なので。

      time_t t = foo + bar;

      などとやった場合、コンパイラは「foo + barは、MAX_INT以下である」という前提でコンパイルしても良いことになっています。 「C言語 未定義動作 バグ」ぐらいでWebを検索するといろいろ具体例が出てきますが、例えば これ [intransient.info]とか。

      time_t tomorrow = now + 60*60*24; //現在時刻nowから、丁度1日後の日時を求める

      if(tomorrow < now) {// 足してるのに小さくなっていると言うことはオーバーフローしたはず! 2038年問題
      • by Anonymous Coward

        あるいは実行時エラーでプログラムを停止する可能性もありますね。
        実際、規格上はゼロ除算の結果も「未定義」で、古いAndroidはゼロ除算でエラーを起こさず黙って間違った結果のまま実行を続けたりしてくれましたが規格上は完全に合法です。

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

処理中...