>間違ってるところがあるか確認してもらいたい
「間違ってる」の意味があいまいです。
質問に書かれている文章を文字通りに解釈して「フローチャートの書き方」だけを確認するなら、間違いは後述の(1)の2つ。
「プログラムの適切な動き」という観点で見た時の間違いは(2)。
「プログラムの計算精度」という観点で見た時の間違いは(3)。
添付図で説明します。
(1)フローチャートの書き方の間違い
①背景が黄色の中に書いた、YesとNoが必要。
次のどちらかの理由でYesとNoを書かなかったのだと思うが、分岐に対するYesとNoは、書く必要がある。
・「i<n」の判定結果がYesなら下へ分岐し、
Noなら横へ分岐するという暗黙の規則があると思った
・うっかり忘れた
②青ワク内のカウンタiとnは整数だから、プログラムも整数化する
ピンク背景のように書くべき。
元のプログラムだと、nがdouble型なので、57.6と入力しても動作してしまう。
また、「i<=n」には「=」が含まれるが、double型の数値はIEEE754 に準拠しているため誤差を含んでいるので、等値判定には不向き。
(2)プログラムの正しい動作という観点で見た時の間違い
このプログラムは、「nに0や負値など間違った数値は入力されない」という前提でつくられている。
プログラムを操作する人は、「正しい動くようなn値を入力する」という前提条件の下で書かれたフローチャートなら、(2)は問題なし。
プログラムを操作する人に対し、「どんなn値が入力されても、正しい動作を保証する」というフローチャートなら、nが入力された時点で、値が1以上であることをチェックし、そうでなければ再入力を促す動作が必要。
(3)プログラムの計算精度という観点で見た時の間違い
このプログラムは、次のように計算している。
1/2+1/4+・・・+1/1048576+・・・
=0.5+0.25+・・・+0.00000095367431640625+・・・
=(0.5+0.25+・・・)+0.00000095367431640625+・・・
上記の3行目に書いた式のように、計算はカッコ内を累積加算して大きくなった値を求めてから、それに小さな値を加算している。
この場合nの値によっては「情報落ち」(※)が発生する可能性がある。
プログラムを操作する人が、「情報落ち」が発生しないようなiとn、たとえば「i=1,n=10」で計算するなら、(3)は問題なし。
しかし、「i=1、n=21」の場合は、下記の計算になる。
1/2+1/4+・・・+1/1048576+1/2097152
=0.5+0.25+・・・+0.00000095367431640625+・・・
=(0.5+0.25+・・・+0.00000095367431640625)+0.000000476837158203125
もしも、上記の最後の行に書いた計算で「情報落ち」が発生しても、下記のように計算順序を逆にすることで回避できる。
1/2097152++1/1048576+・・・+1/4+1/2
=0.000000476837158203125+0.00000095367431640625
+・・・0.25+0.5
そのためには、添付図の黄緑色のワク内の記述を改訂することが必要。
※.情報落ち
絶対値の大きな値と小さな値の足し算を行った時に、絶対値の小さな値が結果に反映されないことで発生する誤差。
添付図
(クリックで拡大表示される)