解答を以下に示します。
これは、cos関数の引数に度数を入れてしまう初歩的なミスです。プログラミング入門者は、大体間違えます(筆者もよく間違えました)。cos関数を使う場合、ラジアン(度数×π/180)で入れないと、意図しない値になります。
これは昔、筆者が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)に「改訂」したのではないでしょうか。詳しい経緯をご存じの方がいらっしゃいましたら、教えてください。
今回の自己採点シートを下記に示します。
問題 | 内容 | 配点(点) |
---|---|---|
cosの算出プログラム | 引数の値の間違えに気づいた | 40 |
atan2算出プログラム | 引数の順番が異なっていることに気付いた | 60 |
その他 | その他の間違えに気づいた | +5×件数 |
リスト4 自己採点シート |
プログラマーは、理工系に分類できますが、数学が得意なエンジニアはあまりいません。今回は、数学に関する問題を出しました。プログラミングの実装方法も大事ですが、数学的な技術を身に付けると、よりレベルの高いエンジニアになれます。
[1]「ゲーム開発のための数学・物理学入門 初版」(Wendy Stahler、2005、ソフトバンククリエイティブ)
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.