では10年秒数と100年の秒数と1000年の秒数を計算させてみましょう. どのような式を入力すればよいかは, もう分かりますね?
# 60*60*24*365*10;; - : int = 315360000 # 60*60*24*365*100;; - : int = 1006116352 # 60*60*24*365*1000;; - : int = -676254720 #
10年の秒数はこれで良さそうですが, 100年, 1000年の秒数はその10倍, 100倍になっていませんね. これは, 計算結果が Ocaml 処理系が扱える整数の範囲を超えてしまったことによる現象です.
Ocaml処理系は整数を 30 ビットで表わしているため, 整数としては 1,073,741,823 から -1,073,741,824 までの数しか扱えません. 例えば100年の秒数は 3,153,600,000 のはずですが, この範囲を超えてしまったので2進数で下から 30ビットぶんだけ取り出し, それ以上の桁を省いてしまっています. そのためにおかしな結果となるのです.
ついでに言えば, 上の計算では一年の日数を 365 としています. しかし, 100年分の秒数を計算する場合には, 閏年の効果を考えて一年は平均 365.24 日としておくべきでしょう.
一年を365.24日としたり, 100年の秒数や1000年の秒数のように大きな数を計算する場合は, 実数を使って計算することができます. では次に実数による計算の方法を見てみましょう.
17.4.1 Ocaml処理系を起動して一日の秒数を計算する | 17.4.2 十年・百年・千年の秒数と整数の範囲 | 17.4.3 千年の秒数と実数を使った数式 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Tue, 05 Jul 2005 00:08:34 JST (1488d) |