12/13 数値計算(3),パターン認識(1)


補足


試験について


前回の感想,質問より

Q(前々回の質問ですが,前回の講義の内容なので今回掲載します).
資料pdfでは最大、最小値のオーダーの限界は10308とあります。ですが、irb上で2.0**-1074を実行すると 5.0e-324という値がちゃんと出力されますが、これは有効桁数を減らして最小値を拡張しているということでいいのでしょうか。
A.
スライドや教科書では省略しているのですが,浮動小数点の規格 IEEE 754ではまさに,「有効桁数を減らして最小値を拡張」を実行しています.具体的には, スライドのbが0の時(絶対値が2**-1023以下)には,仮数部の「1.XXX」の1を省略しないでデータに入れ,2**-1023以下の小さい数を表します.
irb(main):032:0> [2.0**-1023+2.0**-1025].pack("E").unpack("Q")[0].to_s(2)
=> "1010000000000000000000000000000000000000000000000000"
irb(main):033:0> [2.0**-1024+2.0**-1026].pack("E").unpack("Q")[0].to_s(2)
=> "101000000000000000000000000000000000000000000000000"
のようにして,浮動小数点のビット表現をみてみるとこのあたりがわかると思います.
Q.
チェックは通ったが、実際に動かしてみると一列目が[[1.0, 0.0, 0.0, 1.0000000000000002]となってしまった。
A.

相対誤差は 0.0000000000000002/1.0000000000000002 = 1.9999999999999995e-16 なので,有効数字は16桁近くあるということになります.元々,浮動小数点の倍精度表現では有効桁数は53ビット,10進数で16桁に少し足りない程度なので,この程度の誤差は許容範囲内になります.
Q.
誤差難しい
Q.
浮動小数点表示まではある程度理解できたが、式変形による桁落ちの回避とかGauss消去法はさっぱりだった。
A.
第6章の練習,投票のところに,この講義独自の例を追加しました.今日の講義の最初で復習も兼ねて扱います.

前回の課題について


今日の練習,投票


投票システム

vote.rbをダウンロードして(「リンク先のファイルを別名で保存」で,ホームフォルダの下のalgo17を選択(なければ作る).".txt"を「追加しない」を選ぶ),ホームディレクトリに保存します.ドックからターミナルを起動して,
cd algo17
を済ませてから,
ruby vote.rb 選択肢番号
のように使います.

irbを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.


テキストの補足


今日の課題


自宅で自習をする人のために

アルゴリズム入門共通資料の中に講義で使うRuby言語の処理系のインストール法があります.