アカウント名:
パスワード:
グレゴリオ暦は1年を365.2425日と定義してるけど、実際の太陽年は365.242186日で、1年につき26秒ズレてて約3323年で1日ズレてしまう。その時どうするのか見れないのが残念
AD3000年あたりになったところで、「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年」というルールを、「4で割り切れると閏年だが、100で割り切れると閏年ではなく、しかし 400で割り切れると閏年。にも拘わらず 3200 で割り切れると閏年ではない」にルール変更すれば OK。1年の平均の長さは、365.2421875 日になる。
……が、その頃は、1年の長さがもうちょっと短くなってそう。
っていうか、天文学者はなんでユリウス年を使うんじゃろ?夜間の天文観測に便利だから正午に始まるユリウス通日を使う、というのは合理的だからわかるけど
VSOPが時刻の計算にユリウス年を使っているからじゃないかな。#ユリウス日とユリウス年は名前がたまたま同じだけど、それ以上の関係はなかったりする...
「(VSOPの計算等も含めて)天文学者はなんでユリウス年を使うのか」という問いなのでは。。。
ユリウス年を使うようになった以前は、ベッセル年とかを使っていたんでしょうが、ベッセル年のように経年変化する値では力学計算に使いにくいし、かといって、固定値を使う限り、どんな値を置いたとしても正確な値にはなりえないし、そもそも、「大体、太陽年に近い値になっていた方がわかりやすい」というだけのことで、時間単位として用いることができるものであれば、実のところなんでもいいし、ということで、ユリウス年を使ってるんじゃないでしょうか。
なんでブランデーが? と思ってしまった orzVSOP = Very Superior Old Pale
>「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)扱いされかねない。
むしろ論理式で+-使うなの方が適切。
閏年の判定より上司に見せる事が主目的になったプログラムって雰囲気。
言語がLLで、"==="を使えという指摘だった説# ネタにマジレスか?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
グレゴリオ暦 (スコア: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:グレゴリオ暦(オフトピです) (スコア:1)
国際天文学連合は、「1年」というえば、ユリウス年(365.25日=31,557,600秒)だから、「1光年」は、光が真空中を、31,557,600秒掛かって進む距離と聞いたときには、驚愕した。
¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
Re:グレゴリオ暦(オフトピです) (スコア:2)
っていうか、天文学者はなんでユリウス年を使うんじゃろ?
夜間の天文観測に便利だから正午に始まるユリウス通日を使う、というのは合理的だからわかるけど
Re: (スコア:0)
VSOPが時刻の計算にユリウス年を使っているからじゃないかな。
#ユリウス日とユリウス年は名前がたまたま同じだけど、それ以上の関係はなかったりする...
Re: (スコア:0)
「(VSOPの計算等も含めて)天文学者はなんでユリウス年を使うのか」という問いなのでは。。。
ユリウス年を使うようになった以前は、ベッセル年とかを使っていたんでしょうが、
ベッセル年のように経年変化する値では力学計算に使いにくいし、
かといって、固定値を使う限り、どんな値を置いたとしても正確な値にはなりえないし、
そもそも、「大体、太陽年に近い値になっていた方がわかりやすい」というだけのことで、
時間単位として用いることができるものであれば、実のところなんでもいいし、
ということで、ユリウス年を使ってるんじゃないでしょうか。
Re: (スコア:0)
なんでブランデーが? と思ってしまった orz
VSOP = Very Superior Old Pale
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)扱いされかねない。
Re: (スコア:0)
むしろ論理式で+-使うなの方が適切。
Re: (スコア:0)
閏年の判定より上司に見せる事が主目的になったプログラムって雰囲気。
Re: (スコア:0)
言語がLLで、"==="を使えという指摘だった説
# ネタにマジレスか?