僕は、数学が苦手なのでどうにかプログラムに計算をやらせたいと思い、今回は数学の中でも誰しも理解に苦しんだ「log(対数)」を求めるプログラムを作ってみました。
まず考えとしては、入力した実数になるまで何回2乗したのか、それが分かれば対数を求めれるのではないかと考えました。
実行結果のとおり、4や1024といった2進数の場合では正常に動いているのですが、3や1000といった対数を求めた時に小数点以下が出てしまう値では正確な数字がでませんでした。
実行してみて、ループした回数を求めるプログラムなので整数以下は確かにでないと思いました。そもそも、対数とは普通の数で表すことができなかったから「log」という表し方ができたわけであって、それを回数で求めるには無理があるのではないかと考えてしまい、当主が途方に暮れていたのですが、調べたところ対数を求める関数があると知り、実行してみました。
これはすごいですね。前よりもスマートですし、前のプログラムでは出なかった小数点以下の数字もしっかり表示されています。やはりプログラムは素晴らしいと思います。
ですが、正直少し心残りがあります。確かにこのlog関数を使えば簡単に解くことはできますが、できれば前のプログラムの考え方のままどうにか小数点以下まで表示するプログラムを作りたかったのが本音です。しかし、それを表現する方法は僕の頭の中では思いつくことはできませんでした。そもそも、このプログラムでは対数の底を2とする答えしか求めることができませんし、logの前につく数字が出てきた時の対応ができていないなど、不備が沢山見受けられます。
なので、この投稿をみたプログラマーさんの中で我こそは作れるという方がいましたら、是非コメントしていただけると嬉しいです。
#最後に
アドベントカレンダーを通して、改めてプログラムの難しさと面白さを実感できました。今の自分は人に教えてもらうことしかできませんが、勉強を重ねて1人でもプログラムを組めるようなプログラマーになりたいです。なにより苦手な数学と向き合うことができたので良かったです。