Rubyで平方根を求める方法を現役エンジニアが解説【初心者向け】

初心者向けにRubyで平方根を求める方法について現役エンジニアが解説しています。xを二乗するとyになるとき、xはyの平方根になります。平方根を求めるには、Mathクラスのsqrtメソッドを使います。また**演算子やニュートン法でも求めることが出来ます。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyで平方根を求める方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。
 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Rubyで平方根を求める方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

平方根を求める方法

Rubyで平方根を計算する場合は、大きく分けて3つ方法があります。通常はsqrtと**が扱えれば十分です。
興味があれば、ニュートン法も知っておきましょう。

  1. Mathモジュールのsqrtメソッドを使用する
  2. 指数の計算に利用する演算子「**」を使用する
  3. ニュートン法で計算する

1.のsqrtメソッドを使用する場合は、平方根を求めたい数値を引数に渡すことで計算できます。
以下のように使用します。

 

Math.sqrt(2) #=> 1.4142135623730951

 

2.のように**で平方根を計算する場合は、計算する数値を1/2乗することで求められます。
1/2とすると、2の1乗になってしまうので、1/2.0と書きましょう。

 

2**(1/2.0) #=> 1.4142135623730951

 
ちなみに **1/3.0とすれば3乗根が、**1/4.0とすれば4乗根が計算できます。
 

ニュートン法で平方根を求める方法

3つ目の方法としてニュートン法があります。

f(x)=0になるようなxを求めるアルゴリズムの1つで、方程式の近似値(解に近い値)を算出できます。
手順としては、方程式を作る->ニュートン法の漸化式に当てはめる->計算を繰り返す、と言った形になります。

計算を繰り返すたびに求める値に近づいていきます。
√2を求める場合であれば、求める関数をf(x)=x^2 – 2 とおきます。

ニュートン法の漸化式
Xn+1 = Xn – f(Xn)/f’(Xn)に当てはめて
Xn+1 = Xn – (Xn^2 -2)/2Xn という関係式を算出します。

最後に適当なXnを代入して計算して、Xn+1を計算。
その計算結果をまたXnに代入して計算と繰り返すことで、求めたい値に近い値を得られます。
 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

有効桁数を指定して平方根を求める方法

有効桁数を指定する場合は、floor/ceil/roundを押さえておきましょう。
floorで切り捨て、ceilで切り上げ、roundで四捨五入ができます。引数で桁数を指定できます。

使い方は、以下の通りです。
 

1.2345.floor(3)
1.2345.ceil(3)
1.2345.round(3)

 

実際に書いてみよう

まずは、sqrtや**からみていきます。以下のように書いてみてください。

 

# √2を計算
puts Math.sqrt(2)
puts 2**(1/2.0)
# floor/ceil/roundで桁数を指定
puts Math.sqrt(2).floor(3)
puts Math.sqrt(2).ceil(3)
puts Math.sqrt(2).round(3)

 
計算結果は以下のようになります。

1.4142135623730951
1.4142135623730951
1.414
1.415
1.414

次にニュートン法を使用した計算をみていきます。
以下のようにコーディングしましょう。
 

# 適当な初期値の設定
x = 5.0

10.times {|i|
    # 漸化式を元に計算する
    # この時x2の方がxより求める値に近くなる
    x2 =  x - (x * x - 2) / (x * 2)
    # x2をxに代入する
    x = x2
    puts "#{i}回目: #{x}"
}

 

実行結果は以下の通りです。繰り返すたびに値が√2に近づきます。

0回目: 2.7
1回目: 1.7203703703703703
2回目: 1.44145536817765
3回目: 1.414470981367771
4回目: 1.4142135857968836
5回目: 1.4142135623730951
6回目: 1.414213562373095
7回目: 1.4142135623730951
8回目: 1.414213562373095
9回目: 1.4142135623730951

ニュートン法はただ平方根を求めたい場合には向きませんが、複雑な関係式から解を算出する場合に必要です。

以上で解説を終わります。sqrtや**を押さえて、平方根を計算できるようにしましょう。ニュートン法もよければ覚えてください。

 

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、ruby python go。最近はgoにハマってます。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。