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

2021年の節分は124年ぶりに『2月2日』に」記事へのコメント

  • by Anonymous Coward

    グレゴリオ暦は1年を365.2425日と定義してるけど、実際の太陽年は365.242186日で、1年につき26秒ズレてて
    約3323年で1日ズレてしまう。その時どうするのか見れないのが残念

    • by Anonymous Coward

      AD3000年あたりになったところで、
      「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」というルールを、
      「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年。にも拘わらず 3200 で割り切れると閏年ではない」にルール変更すれば OK。
      1年の平均の長さは、365.2421875 日になる。

      ……が、その頃は、1年の長さがもうちょっと短くなってそう。

      • この閏年のルール、
        「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」
        ですが、これで、練習問題として、閏年判定プログラムを書いて、悩んだ人も多いはず。

        「400で割り切れると閏年だが、(それ以外の)100で割れる年は閏年でなく、(それ以外の)4で割れる年は閏年」
        と変換すると、プログラムがとても簡単になる……と、いつも思う。
        --
        ¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
        • by Anonymous Coward on 2020年12月15日 11時20分 (#3941998)

          >「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」

          uru = (nen%4 == 0) - (nen%100 == 0) + (nen%400 == 0)
          ってプログラムを書いて上司に「算術式で"=="使うな!!」って怒られた。

            #えーっ、主題文通りにプログラムしただけなのに。

          親コメント
          • これで上司もニッコリだ!(?)
            uru = !(nen % 4) - !(nen % 100) + !(nen % 400)

            親コメント
            • by Anonymous Coward

              4で割り切れない年だと誤動作起こすよ。

              • あれ、そうでしたか。処理系による?
                C++では数値に対する ! は ==0 と同じだったはず(演算子オーバーロードされていなければ)

                親コメント
              • by Anonymous Coward

                数値に否定演算子(NOT)を使うと各ビットが反転した数値になる処理系もある。
                !を否定演算子として論理演算にしか使用できない処理系なら大丈夫だけど、それは暗黙の型変換で数値型から論理型に変換されてから否定されるから。
                もっと危険な話になると、最下位ビットのみで判断するような処理系だと2もfalse(0)扱いされかねない。

          • by Anonymous Coward

            むしろ論理式で+-使うなの方が適切。

          • by Anonymous Coward

            閏年の判定より上司に見せる事が主目的になったプログラムって雰囲気。

          • by Anonymous Coward

            言語がLLで、"==="を使えという指摘だった説
            # ネタにマジレスか?

計算機科学者とは、壊れていないものを修理する人々のことである

処理中...