sin30°の値を求めるプログラム(Java)

なんか新しいテーマができてきたのでさくっと書いてみる。

/**
 * 
 * @author Tomomitsu Kusaba
 *  
 */
public class sample
{
   public static void main(String[] args) 
   {
      float ans = (float)Math.sin(Math.toRadians(30));
      System.out.print("sin 30°= ");
      System.out.println(ans);
   }
}

入力がない分、昨日よりだいぶ短い感じ。Javaでは度からラジアンへ変換するメソッドがあったのでこれでいいが、普通は度*π/180みたいな計算をする必要がある。
なお、Math.sinメソッドの戻り値はdouble型になっているがそのままだと誤差が発生していて下位の2桁くらい信用ならない値が入ってくるのでfloat型でナローイングしてみた。
まあ、そのまま素直にdouble型で出してもいいけど……。

答えは0.5と出て欲しいが、double型でそのまま出力すると0.49999999999999994みたいな答えが出てきてしまう。型変換してみることで0.5という得たい数値となった。

ラジアンに変換する→sinに変換するという2つのステップを有限の桁数で計算しているのでこのようなことが起こるのだろう。コンピュータでの計算において分数の値の保持というのは工夫が必要なので単純なプログラムを組んで誤差が出るのは仕方ないところ。