今年も「コンピュータは正確な計算ができないから心せよ」と新入生を脅かす季節がやってきた.多くの学生が,「コンピュータとは正確無比な計算をするもの」と思い込んでいるので,たいがい驚く.
典型的な例がこれ.よく知られている「Pythonで0.1+0.2を計算すると,0.30000000000000004になる」というものである(Rubyでもそうなる).
初回の授業なので,「無理数や循環小数を実際に計算しようとしてみ?たとえば円周率.小数点以下の桁が無限に続くやろ?無限には記述できないから,どこかで打ち切るしかない.打ち切った瞬間に,それは『近似値』だ」という話とか,「コンピュータの基礎は2進数,ゼロとイチの世界だってことは,高校の『情報』で習ったから知ってるよね?ゼロと正の整数はそれでいいとして,マイナスの数はどうする?マイナス記号は,ゼロ?イチ?実数はどうしよう.小数点,どうやって表現する?」という話とかをすると,皆,キョトンとした顔をするので面白い.
授業のフィードバックをみても「目から鱗でした」「驚きました」という感想がたくさんあって楽しい.もちろん,今後の授業のなかで,おいおい説明していくからね,と布石を打っておく.そうしておけば最後まで興味を持って授業に参加してくれるだろうという期待もある.
振り返ってみれば,私が学生のころに誰先生に何を習ったかは,いまとなってはほぼ忘却の彼方ではあるものの,杉原幸吉先生に(いや,伊理正夫先生だったか?)「計算誤差をいかに伝播させないような計算方法が重要なのだ」と教わったことは憶えている(あやふやだけど).
あと,和田英一先生に習ったオブジェクト指向.先生の「コップの水は飲まれ方を知っている」という説明に唖然.オブジェクト指向をそれなりに理解している今では,その説明で言わんとすることは理解できるが,当時は「なに言ってんだこのひとは」と思ったものだ.和田英一先生,どうもすいません(30年の時を超えて大反省).
0 件のコメント:
コメントを投稿