アカウント名:
パスワード:
グレゴリオ暦は1年を365.2425日と定義してるけど、実際の太陽年は365.242186日で、1年につき26秒ズレてて約3323年で1日ズレてしまう。その時どうするのか見れないのが残念
AD3000年あたりになったところで、「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」というルールを、「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年。にも拘わらず 3200 で割り切れると閏年ではない」にルール変更すれば OK。1年の平均の長さは、365.2421875 日になる。
……が、その頃は、1年の長さがもうちょっと短くなってそう。
>「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」
uru = (nen%4 == 0) - (nen%100 == 0) + (nen%400 == 0)ってプログラムを書いて上司に「算術式で"=="使うな!!」って怒られた。
#えーっ、主題文通りにプログラムしただけなのに。
これで上司もニッコリだ!(?)uru = !(nen % 4) - !(nen % 100) + !(nen % 400)
4で割り切れない年だと誤動作起こすよ。
あれ、そうでしたか。処理系による?C++では数値に対する ! は ==0 と同じだったはず(演算子オーバーロードされていなければ)
数値に否定演算子(NOT)を使うと各ビットが反転した数値になる処理系もある。!を否定演算子として論理演算にしか使用できない処理系なら大丈夫だけど、それは暗黙の型変換で数値型から論理型に変換されてから否定されるから。もっと危険な話になると、最下位ビットのみで判断するような処理系だと2もfalse(0)扱いされかねない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
グレゴリオ暦 (スコア:0)
グレゴリオ暦は1年を365.2425日と定義してるけど、実際の太陽年は365.242186日で、1年につき26秒ズレてて
約3323年で1日ズレてしまう。その時どうするのか見れないのが残念
Re: (スコア:1)
AD3000年あたりになったところで、
「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」というルールを、
「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年。にも拘わらず 3200 で割り切れると閏年ではない」にルール変更すれば OK。
1年の平均の長さは、365.2421875 日になる。
……が、その頃は、1年の長さがもうちょっと短くなってそう。
Re:グレゴリオ暦(オフトピです) (スコア:1)
「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」
ですが、これで、練習問題として、閏年判定プログラムを書いて、悩んだ人も多いはず。
「400で割り切れると閏年だが、(それ以外の)100で割れる年は閏年でなく、(それ以外の)4で割れる年は閏年」
と変換すると、プログラムがとても簡単になる……と、いつも思う。
¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
Re: (スコア:0)
>「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」
uru = (nen%4 == 0) - (nen%100 == 0) + (nen%400 == 0)
ってプログラムを書いて上司に「算術式で"=="使うな!!」って怒られた。
#えーっ、主題文通りにプログラムしただけなのに。
Re: (スコア:1)
これで上司もニッコリだ!(?)
uru = !(nen % 4) - !(nen % 100) + !(nen % 400)
Re:グレゴリオ暦(オフトピです) (スコア:0)
4で割り切れない年だと誤動作起こすよ。
Re:グレゴリオ暦(オフトピです) (スコア:1)
あれ、そうでしたか。処理系による?
C++では数値に対する ! は ==0 と同じだったはず(演算子オーバーロードされていなければ)
Re: (スコア:0)
数値に否定演算子(NOT)を使うと各ビットが反転した数値になる処理系もある。
!を否定演算子として論理演算にしか使用できない処理系なら大丈夫だけど、それは暗黙の型変換で数値型から論理型に変換されてから否定されるから。
もっと危険な話になると、最下位ビットのみで判断するような処理系だと2もfalse(0)扱いされかねない。