志茂吉建氏のRubyコラム『数値の美学』
Rails技術者認定試験運営委員会の吉政でございます。
私が企画したコラムの件です。Rails技術者認定試験運営委員会のオーナーでもあるヒューマンリソシアが志茂吉建氏のRubyコラム『数値の美学』を公開しています。
志茂吉建氏のRubyno美学シリーズのご紹介です。今回は「数値の美学」です。Rubyを学び始めてた方は是非ご覧ください。
###
Rubyで数字を扱う場合に押さえておかないといけないことがあります。これは、美学と言うよりもオブジェクト指向に基づく決まりになります。数学 的には整数と浮動小数点数で意味合いは変わってきますが、日常生活では以下の2つの数字は同じです。Rubyは文字列や数値などを含めてオブジェクトであ るとお伝えしました。Ruby上では、2つの数字は違うクラスとなっています。
35.0
ではクラスを調べてみましょう。クラスは以下の通りとなります。数学的には整数と浮動小数点数なので何となく納得できると思います。
>> 35.0.class
=> Float
>> 35.class
=> Fixnum
では次に計算をしてみましょう。10/3は、以下の通りとなります。整数での計算になりますので、10÷3=3となります。では、どのようにしたら3.33333となるのでしょうか。
=> 3
>> (10.3).class
=> Fixnum
10.0÷3.0で計算すると期待通りの答えとなります。簡単なように見えて奥深いですね。足し算やかけ算では浮動小数点数はあまり気にする必要はありませんが、割り算の場合は注意する必要があります。
=> 3.33333333333333
>> (10.0/3.0).class
=> Float
では次に小数点を扱う円周率を計算するプログラムを作成してみたいと思います。今回は、マクローリン展開という方法を利用して、25桁の円周率を計 算するプログラミングを作成しました。特徴としては、BigDecimalクラスを利用して計算しているところにあります。BigDecimalは可変長 浮動小数点計算クラスです。Floatクラスは精度が15桁なので25桁の計算をするには、BigDecimalを利用する必要があります。通常の数値 は、FixnumクラスやFloatクラスとなりますが、型変換を行わないようにするために必要な数学上の定数はBigDecimal型で変数として宣言 しました。なお、今回プログラムを作成するのに以下のサイトを参考にさせていただきました。
http://www.ss.cs.meiji.ac.jp/CCP051.html
(この続きは以下のコラム本文をご覧ください)
http://resocia.jp/column/339/