バグ検出ドリル(2)理系なのにプログラマーは苦手!? 数学の問題山浦恒央の“くみこみ”な話(102)(3/3 ページ)

» 2018年01月17日 10時00分 公開
前のページへ 1|2|3       

4.解答

 解答を以下に示します。

問題1(cos算出プログラム)の解答

 これは、cos関数の引数に度数を入れてしまう初歩的なミスです。プログラミング入門者は、大体間違えます(筆者もよく間違えました)。cos関数を使う場合、ラジアン(度数×π/180)で入れないと、意図しない値になります。

問題2(atan2算出プログラム)の解答

 これは昔、筆者が3日間悩んだバグです。atan2の値の変化を確かめようと、Excelで計算式を組んでatan2を算出し、結果が正しいことを確認してからC言語で作ったのですが、計算結果が合いません。

 散々悩んだ末、atan2の引数をよく調べると、Excelのatan2と、C言語のatan2とでは、引数の順番が逆転しているのです。Excelのatan2(x,y)は、C言語ではatan2(y,x)となります。分かってしまえば単純なバグですが、一度、「atan2の引数は、ExcelもC言語も同じ」と思い込むと、なかなかそこから抜けられません。皆さんは分かったでしょうか。

 それにしても、なぜ、Excelではatan2(x,y)で、C言語ではatan2(y,x)と入れ替わっているのでしょう。普通、数学では(x,y)と表記するのに、なぜC言語ではatan2(y,x)と書くのでしょうか。

 筆者の推測ですが、atan2の歴史は、「高級プログラミング言語界の北京原人」である「FORTRAN」までさかのぼります。FORTRANでは、atan2(y,x)となっています。それを代々の高級プログラミング言語が継承したのでしょう。しかし、xとyを書き間違うプログラマーがあまりにも多かったので、後発のプログラミング言語であるExcelでは、あえて、atan2(x,y)に「改訂」したのではないでしょうか。詳しい経緯をご存じの方がいらっしゃいましたら、教えてください。

5.自己採点シート

 今回の自己採点シートを下記に示します。

問題 内容 配点(点)
cosの算出プログラム 引数の値の間違えに気づいた 40
atan2算出プログラム 引数の順番が異なっていることに気付いた 60
その他 その他の間違えに気づいた +5×件数
リスト4 自己採点シート

6.終わりに

 プログラマーは、理工系に分類できますが、数学が得意なエンジニアはあまりいません。今回は、数学に関する問題を出しました。プログラミングの実装方法も大事ですが、数学的な技術を身に付けると、よりレベルの高いエンジニアになれます。

参考文献

[1]「ゲーム開発のための数学・物理学入門 初版」(Wendy Stahler、2005、ソフトバンククリエイティブ)


【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.