プロが教える店舗&オフィスのセキュリティ対策術

コンピュータのカテゴリに書き込もうかとも迷いました。
場違いでしたらすみません。

表計算ソフト(エクセル)で、遊びで円周率の近似をやってみることにしました。半径=0.5の円に内接する正多角形の周の長さを求めるやり方です。半径=0.5にしたのは、直径1の円の円周率は、周の長さをそのまま円周率とすることができるからという理由からです。

半径0.5の円に内接する正多角形の隣り合う2点ABと円の中心Oとを結んで出来る二等辺三角形OABの辺ABの長さは、
=√(0.5^2+0.5^2-2*0.5*0.5*cos∠AOB)(余弦定理)
=√(0.5^2*2*(1-cos∠AOB))

エクセルでの具体的な計算の仕方
(1)
A1セルに「=3」
B1セルに「=SQRT(0.5^2*2*(1-COS(RADIANS(360/A1))))*A1」
※これでA2セルには、半径0.5の円に内接する正三角形の周の長さが表示されます。

(2)
A2セルに「=A1+1」
B2セルに「=SQRT(0.5^2*2*(1-COS(RADIANS(360/A2))))*A2」

(3)
A2、B2を選択して、下方向へオートフィルします。

オートフィルを続ければ続けるほど、正n角形のnが増大するので、3.14にB列に表示される数値は、”下の行に行くほどどんどん円周率πに近づく”はずです。

なのに、正4316角形と正4317角形(セルB4315とセルB4315)では、
正4316角形の周の長さ=3.14159237622779
正4317角形の周の長さ=3.14159237622464
となっており、正4316角形の周の長さよりも正4315角形の周の長さのほうが長いことになっています。

正∞角形の周の長さ÷直径=円周率というのは、数学の教科書にも載っているようなことなので、”下の行に行くほどどんどん円周率πに近づく”という考え方自体は間違っていないと思うのですが・・・

コンピュータの限界とか、そういう問題でしょうか?

A 回答 (5件)

Excelの仕様です。


有効桁数は15桁までです。

文書番号: 264626 - Excel 2000 仕様の説明
http://support.microsoft.com/kb/264626/ja

| Number precision 15 digits
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。なるほどー。
(使用したエクセルのバージョン情報も記載せずにすみませんでした。Excel2000で当たっています。)
セルの書式設定の表示形式で「数値」を指定すると、小数点以下の桁数は30桁まで表示は出来るということになっているので、そのくらいの精度があるのかと思っていました。

お礼日時:2008/12/08 11:46

コンピュータの限界ではないです. あなたの使っている式が悪く, 桁落ちのために精度がでないだけ. 桁落ちしない式を使えばもっといけ

る.

この回答への補足

なるほど、そうなのですか。
No.1の方のご回答によると、15桁が限界ということなので、その限界を考慮して式を入力すればOKということですか?(計算結果の桁数が小さくなるようにあらかじめ少し引いたり足したりするとか でしょうか・・・)
桁落ちしない式というのは、どのような式なのか、教えていただけるとありがたいです。
(使用したエクセルのバージョンははExcel2000です。)

補足日時:2008/12/08 11:46
    • good
    • 0

 1-cosは、角度が小さいときには、cosがほとんど1に近くなるため、この式のまま計算すると、桁落ちが起ります。

また、この数列は先に行くほど√の中が1に近くなるので、ここでも精度が減少します。
 結局、15桁使って計算しても、結果の精度はその半分の7桁程度になってしまいます。その上、4000回計算しても7桁の精度しか得られないので、この計算式は非常に能率が悪いといわざるを得ません。アルキメデスがこの式を使ってπを3桁までしか計算できなかったのもわかるというものです。
参考URLにいろいろな式があげてあるので、どれがよいか試してみてはいかがでしょうか?

参考URL:http://oshiete1.goo.ne.jp/qa4536688.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、いろいろな式があって参考になりました。

お礼日時:2008/12/11 14:05

有効桁数の問題で、お使いの式では7~8桁しか求められません。



以下の2つの「有効桁数が15桁の数値」は、加算しても、正しく加算されません。
1.23456789012345
0.000000000000000123456789012345
この2つをA1、A2セルに入力し、=A1+A2とか=1-A2とか計算してみましょう。

桁落ちが発生し、=A1+A2はA1と同じ値に、=1-A2は1になります。

お使いの式では、SQRTやCOSの計算中に上記のような桁落ちが起き、正確には計算出来ません。
    • good
    • 0
この回答へのお礼

あ~、そういうことなのですね、なぜ有効桁数15桁なのにこの精度なのか、分かりました。
ありがとうございました。

お礼日時:2008/12/11 14:06

半角の公式を使って


(1 - cos x)/2 = sin^2 (x/2)
とすれば桁落ちが発生する処理がなくなるので, 現状よりは精度がよくなります.
この辺は数値計算では常に注意しなければならないことです.
    • good
    • 0
この回答へのお礼

参考になりました。試してみようと思います。
ご回答ありがとうございました。

お礼日時:2008/12/11 14:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!