数値解析法 (Fortran 編), 2007-06-01 質問とコメント, M は宮本によるコメント。 h00s2073: プログラムを保存して、catで中身を確認したら別なファイルが消え、 保存したはずのプログラムも消えました。vi以外で見ると他にどんな不具合が出るの でしょうか。 M: それは cat コマンドのせいではなくて, 単にあなたが意図していたことと, 実際に 行った操作で成されたこととの間に齟齬があったということでしょう. 要するに操作 間違いなのでは ? その cat が間違ったのか, それ以前の何かが間違ったのか, そこまではわかりませんが. h04s2019: 丸め誤差・打ち切り誤差はなぜ、どのように発生するんですか? M: 十進の有限桁数の有理数を二進では有限桁で表現できないから. h05s2064 も参照. h05s2001: 具体的に誰とはいいませんが、以前他学科のプログラムの授業を受講して いたときに、プログラムを盗作している人がいました。そういうことをやられて しまうと、まじめにプログラムを作っている学生は不愉快になります。 現在の学校のシステムで盗作を防ぐのはおそらく無理なので、学生に警告をしたり、 何らかの方法・対処を教えてくれればありがたいのですが。 M: コンピュータ上でのデータの複写を禁じてしまうと, それはコンピュータを利用する ことのメリットが著しく減じられるでしょう. また, 先人の作品を真似することで 得るものが多かったり, 改良を加えることでよりよいものになったりするというのが, 文化の一面でもありますから, それを禁じるのも悩ましいです. まあ, 相対評価 (クラスの一定割合が A とか) ではなく, 絶対評価 (課題を達成したか どうか) で採点しますので, 他人がどうこうよりも, 努力して自分の能力を伸ばして ください. h05s2002: 先生はLinuxとWindows、どちらを使う機会が多いですか? 僕はWindowsの方が多いです。むしろ大学に来て初めてLinuxの存在を知りました。 M: 最も多いのは, FreeBSD です (エッヘン). h05s2003: 家のパソコンで練習問題等のプログラムを作ることは可能ですか? M: 必要なソフトをインストールするなどして環境を整えれば, もちろん可能です. h05s2004: 1000グラムすなわち1キログラムと聞きました。プログラムだと何グラムで しょうか? M: そんなこと言ってるようじゃあ, まだまだアマグラムですね. エゴグラムかも. ていうか, ちっともエピグラムじゃないしぃ. h05s2007: 先生は暗黙の型宣言を使用する事がありますか? また、それはなぜですか? M: 使い捨てプログラムとして十行程度のものを書くときには, 明示的な型宣言を省略 することもあります. それは, その場で作って, 使って, 終われば破棄するからで, ロジックが簡単で, 保守する必要が無いことが明白だからです. でも大抵は, 再利用する可能性までをも考えて, 明示的に型宣言します. h05s2009: 今日、コンピュータ言語といったらC言語を思い浮かべますが、 なぜFortranを学ばなくてはならないのでしょうか? M: 目的 (この場合は数値計算) にかなうなら, C でもいいですよ. でもそれで複素数 まで扱うのは, めんどくさくなりませんか ? また数値計算なら, そんなに複雑な (抽象的な)データ構造もいらないわけだし. むしろ C でやることのメリットが 見えないのですが...... h05s2011: この授業の目的はなんですか? M: おーーー, これはチャレンジングな質問ですね. シラバスにも書いてあるのです けど, ガイダンス的な最初の日にも説明したつもりでした. それを見て・聞いて, 受講を決めたのではないのですか ? ちなみにシラバスには, 「簡単な数値計算の問題に ついて, 自分でプログラムを作成して問題解決できるようになることをめざします。」 と書いてあります. 箸の上げ下げまで指示されないとできないようでは, 上記にある 「自分で」とは言えませんよね. h05s2012: 概要(Web 版)内に書かれている「暗黙の型宣言には従わない, 全ての変数は 明示的に型宣言する。」というところの暗黙の型宣言というのは何の事ですか? 10進数ということなのですか? また「Input」「Results」は何故大文字から始まっているのですか? M: 明示的な型宣言をせずに, プログラム中でいきなり適当な名前の変数を使うこと です. こうすると, I, J, K, L, M, N のいずれかで始まる変数 (例えば JISSUU) は, 整数型の変数としてあつかわれ, それ以外のもの (例えば SEISUU) は, 実数型と みなされます. 十進数とは全く関係ありません. また後半については, 概要 (Web 版) のどこのことを指しているのか, わかりません. h05s2013: g77 -o ~~~ ~~~.fでコンパイルするところまではできたのですが、 プログラムの実行方法を失念してしまいました。今日は ehome/riko/std/h05s20**/プログラム名 で実行しました。 M: もちろんそれでもいいのですが, カレントディレクトリを `. (ピリオド)' で, また自分のホームディレクトリを `~ (チルダ)' で表すことをを思い出せば, 別の やりかたも浮かんでくることでしょう. まぁ, 資料の 9 ページの脚注にも書いてあるんだけどね. h05s2014: なぜFortranを使用しなければダメなのか資料P6を見ただけではいまいち よくわかりません。性能などは日々進化していくと思うので、そのときに応じたものを 使用した方が正確なものが得られると思うのですがそれはなぜですか。 M: 「正確」かどうかは, 使うものと使いかたによると思います. 新しけりゃ良いと いうものではないでしょう. で, 数値計算の分野では, なぜ Fortran なのか ? それが 文化だからです. 先人の知恵や技術を「学ぶ」ということは, 文化を継承するという 意味もあるのです. h05s2015: 読みやすいプログラムを書くための注意にグループ化すると書いています が、これは具体的にどういう操作をするんですか。 M: 処理内容の意味のまとまりを, プログラム上でも表現することです. 例えば, 空白行を入れて区切ったり, 行頭のインデントを揃えるのとか, サブルーチンにして 下請けに出したりとか, 他にも手があるかもしれません. h05s2016: サブルーチンのルーチンっていうのはどんなものなんですか? M: 言葉の意味がわからないのであれば, 辞書で調べるというのが, フツーなのでは ? そこで `routine' の意味を英和辞典で調べると, 名詞としては「お決まりの手順, 日課, 決まりきった仕事」 (by 英辞郎) などと出ていますよ. 第二義にはプログラムの 話も書いてあるけど. 他の辞書はどうかな ? h05s2019: 私は、物理学実験でマイコンの実験をしました。この授業を受けていて 2進法を使ったり、出てくる語句なども同じに感じました。そして、マイコンよりも さらにコンピュータの中身のように思いました。しかし、未だによく理解できないの ですが、この授業に取り組むにあたって上手く理解するための考え方、コツなどは ありますか? M: マイコンもコンピュータですよ, そもそも `マイクロコンピュータ' の略だし. んで, マイクロだけあって, マイコンの方がはるかに規模が小さくて, よけいな衣を 付けていない, 素朴で素に近いコンピュータと言えるでしょう. 演習室にあるパソコン の方が, 人間が扱いやすいように, いろいろと糖衣をつけているとも言えるかもしれ ません. ということでむしろ, デスクトップ/ノートパソコンよりも物理学実験の マイコンの方がコンピュータの中身むきだしという感じです. いずれにしろ, この授業 (あるいは物理学実験のマイコンの課題) を理解するコツは, 「コンピュータの気持ちになって考える」です. h05s2024: [本文空白] M: 提出物が要件を満足していません. h05s2025: emacsでファイルを開くときに、例えば % test1.f って入力、 Enterしますが、”test1.f ”の " .f "って何なんでしょうか??fileのfでしょうか? M: Fortran の f だと思っていたのですが...... 違う説があるのでしょうか ? h05s2026: 自分はパソコンなどはまったくといっていいほど無知なんですが、 プログラムを作成するにあたって他にも便利なものがあったら教えてください。 またFORTRANの一番の利点はなんですか? M: 「他にも」って, 何の他のことでしょうか ? 「A の補集合」と言うときの A が何で あるか示されていないので答えようがないことが, 論理的にもわかりますよね. また Fortran の利点については, 一般的なことは資料に書いておいたつもりです. それ以外は, 道具をいつどこでどのように役立てるか, 個人の器量ですね. h05s2028: プログラム言語にはいろいろあると書いてあったのですが、Fortranの他に 何がありますか? M: 古い方では COBOL とか LISP とか, それから ALGOL とか Pascal とか, Prolog や C, C++ もあるし, わりと最近では Perl とか Ruby とか Java とか. もちろん他にも いっぱいあるし, 実装系まで考えれば, もっともっと細分化されるでしょう. h05s2030: プログラムを書き込む際7桁目からですが6桁まではどのような意味を 持つのでしょうか。 M: 正確には文法書を見てください. 2-6 桁目は, 文番号を書く場所です. h05s2034: fortranにプログラムを書き込むとき、最初に6文字空ける理由がわかり ませんどのようなメリットのために、このような機能を設定しているのでしょうか? M: 文法に従うというメリットがあります. 決められた文法に従わない場合には, 意図 したとおりに動作しないかもしれないどころか, コンパイルさえできないかもしれない というデメリットがありますよね. h05s2036: Fortranの長所は歴史の長さによる信頼性やライブラリの充実度などがあり ます。逆にFortranの短所はどの様なものがあるのですか?また、他の言語と比較して どのようなことがいえるかを教えてください。 練習問題の実行結果はどのように提出すればいいのですか? M: Fortran 言語の長所・短所については, h05s2026 参照. 実行結果の提出方法は, 「メールで」と指示してあったはずですが ? h05s2039: 先生の講義資料ですが、なぜ1〜3ページがないんですか? また、講義資料P5で、プログラミングの狭義と広義について記述してありますが、この 授業でのプログラミングとは広義の方なのですか? また、プログラムを作成をするため、アルゴリズムを考えるとありますが、これは同じ プログラムを作成する場合でも人により異なるアルゴリズムとなるのですか? M: 資料の元原稿を確認すると, 1-3 ページは表紙と目次でした. またプログラミングは, そうですね我々の目的はある計算結果を得ることですから, 本番の計算の実行以前の部分, 本番計算のための道具(プログラム)を作成する部分を, プログラミングとみなして良いのではないでしょうか. またアルゴリズムは, 算法とも和訳されますが, 計算の手順・方法ですから, これは 同じ目的をもった計算であっても手順・方法が異なることはあり, それによって 計算精度や計算速度が大きく違うこともあります. 資料の 3.1.3 節 (p. 27) を参照. h05s2045: read文とwrite文の違いがよくわかりません。読みやすいプログラムを書く ためにはどのくらいのプログラム言語を覚えればいいんですか? M: 英単語の read と write の意味の違いは, どのくらいわかりますか ? それから, 例えばわかりやすい英語を話すためにどのくらい英語を覚えればいいと思い ますか ? あるいは日本語でもいいですけど. h05s2049: Fortran言語の最新の規格はFortran90/95ですが、今回の講義では主に Fortran77を用いて説明するのはなぜですか? Fortran90/95にはなにか短所があるの ですか? M: たぶん最新の規格は Fortran2003 だと思います. 噂レベルでは Fortran2008 という のも予定されているそうですが. Fortran90/95 や Fortran2003 の最大の欠点と思わ れるのは, 初心者には複雑で習得が困難な要素が加わっていることだと思います. たとえ Fortran2003 を用いたとしても, その高度な機能は無視してサブセットで良いと いうことなら, それには Fortran77 という名前がすでに付いていますし...... h05s2050: exersizeはやったら提出するんですか? M: サポート web ページには, 何を提出するか, 書いてあるはずです. それ以外にも 自分の努力の成果を提出したい人は, ご自由にどうぞ. 教員としてのわたしは, それを 禁止し断る理由がありません. h05s2051: cygwinを使ってみようと思いました。このソフトを使う上で注すべきこと 等はありますか? M: あるかもしれないし, 特にないかもしれません. わたしは使っていないので, その辺の事情はよくわかりません. h05s2052: 今日の授業で、firefoxが繋がらない人が出ました。 自分も鈴木先生の最初の授業でそうなったのですが、この現象はなぜ起こってしまうの でしょうか? M: 「firefox が繋がらない」ではなくて, 「正常に起動しない」ですね. 起動したけど 回線の障害, 相手先サーバでの障害などで繋がらないのとは違いますよね. で, これは firefox の終了時に, 何かゴミのファイルが残るせいだと予想してみます. 利用者が正常に終了させていないからかもしれません. h05s2053: ひとつは講義資料の概要の中の「Fortranに固有なお約束」に、一桁目がC または*ならばその行はコメント行となる、とありますがコメント行とはなんですか。 もうひとつは「はじめに」のPDFファイルの中でデバッグという言葉があったのですが、 これは何をすることなんでしょうか。 M: 文法の細かい話なら, 文法書を参照してください. 「コメント」とか「デバッグ」 など, 言葉の意味がわからないなら辞書を調べるのがフツーではありませんか ? comment とか debug を英辞郎で調べると, 「2. 解説, 注釈」とか「1. 〜から虫を 除く」などと, それぞれ書いてありますよ. 他の意味, 他の辞書ではどうでしょうか ? h05s2055: 宮本先生は数値解析法の授業でやっていることを普段どんなことに活用して いるのですか? M: もちろん, 研究で必要な数値計算をするプログラムを作るのに役立てていますよ, 成績の集計とかもかな. まあ, そのまんまですけど. ものを考えるときの手順などにも 役立っているかもしれない, 特に意識はしていませんけど. h05s2058: ライブラリをいくつか例を挙げて説明があったのですが、他にはどんなの ものがあるのですか? M: 自分で使ったことがあるものをいくつか紹介しただけです. 探せば他にもいろんな もの(用途および実装)が, あることでしょう. h05s2062: integerでやると2/5=0となりrealでやると0.400000006となった。この6は なんですか? M: 前者は, 必要ならば文法書を読み, そして整数の除法をじっくりと考えてください. 2/5 の計算結果の小数点以下は切り捨てられ, 整数部分だけが結果として返されます. 後者については, h05s2064 を参照. h05s2063: Fortranを使いこなせるようになったとしたら、実際の日常生活のどんな ことに活用できますか? M: 道具は, 活用する人が, そうしようと思ったところに, 活用できるのではないで しょうか. ほら, 昔から「ナントカとハサミは使いよう」って言うし. h05s2064: exercise2.2で2/5の演算結果はintegerでコンパイルすると0となるのは わかったんですが、realでコンパイルすると0.400000006となります。小数点以下の6は 二進数のため生じるものですか?二進数についてくわしくないのでわかりません。 以前自習したときlog2とlog2.0で結果が違った記憶があるのですが、関連して教えて ください。 M: 十進数では, 位取り表記の各位 (一の位, 十の位, 百の位, など) は, 基数である 10 の冪乗が対応しています; 一の位は 10 のゼロ乗, 十の位は 10 の一乗, 百の位は 10 の二乗, というように. これは小数点以下も同じで, 0.1 は 10 のマイナス一乗, 0.01 は 10 のマイナス二乗となります. 上の説明で基数の 10 を 2 に置換えたのが, 二進数ですね. すると二進数で 0.1 は 2 のマイナス一乗, 0.01 は 2 のマイナス二乗 となり, すなわち十進ではそれぞれ 1/2=0.5, 1/4=0.25 となります. 資料の 3.1.2 節 (p. 25) あたりも参照. 対数関数の方は, たぶん違わないと思うんだけどなぁ. と思って文法書を見たら, やっぱり違うかもしれないという気がしてきました. まあ, どう違ったのかを説明して もらわないうちは, これ以上何とも言えませんが. h05s2069: コンピュータ内で使うのは0と1だけだと聞きましたが、私達がコンピュータ に入力するのは数字だけでなく文字もあります。どんな原理でコンピュータが認識する のですか? M: 文字に数値をわりあてます. 例えば最も一般的と思われる ISO とかの 8 bit の コードでは, `A' は 0x41 (十進で 65), `B' は 0x42 (66), `a' は 0x61 (97) など となっています. これらの数値が一致すれば, その文字が何であるか判別できます. ところで, このことを「認識」と言いますか ? さらに, どのデータが「文字」であり, あるいは「数値」であるのか, だれがどうやって判断しているのでしょうね ? h05s2073: 前回までの授業で、和や差のプログラムを入力するときは英語のaddなど 使っていたが、今回はwa,saなど日本語のローマ字表記でプログラムが実行されました。 これから授業は自分の好きな方でプログラムを作っていけばよいのかどうかおしえて ください。 M: ええっと, どちらでも同じようにプログラムを作成することができて, また他人が それを読んで理解することができると実証されたわけですよね ? で, どちらか一方で なければ *いけない* と強制される理由が, 何かあるのでしょうか ? ある場合とない 場合とで, それぞれあなたはどの様に行動したらいいでしょうか ? h05s2075: 2 Fortran 文法入門 2.1 まずはお約束のところの文章『三日後の自分は 他人と思え』の部分が強調されていたのですが、どういう意味なのでしょうか? M: ええっと, 強調されていることの意味を聞きたいのでしょうか ? そりゃもちろん 大切なことだから強調したのに決まってますよ. あなたの質問には, このようにも答えられるのですが, ことほどさように自分の考えを 他人に誤りなく伝えるのは難しいことなのです. では自分のことなら, いつでも自分で わかっているのでしょうか ? 一年前, 三年前, あるいは十年前の自分の考えは, 今でも わかりますか ? 当時と同じ考えを, 今でも持っていますか ? 価値観は変わって いませんか ? h05s2077: この授業の参考書としてサポートページに一冊あげられていますが、 その他にみんなに薦めたい参考書などありますか? M: 「みんなに」すすめたいものは, 思い付きません. この分野は, 初心者の段階では 個人差がありすぎますから, それぞれで自分に合ったものを見つけてください. h05s2079: 就職先で数値解析を使うとありますが授業大学でも使うことはありますか? M: 授業で役立つなら, せっかく手に入れて身につけた自分の手持ちのアイテムがある ならば, 駆使して役立てれば良いのではないですか ? h05s2063 参照.