icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。

 

田島悠介

今回は、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] 未経験からWebエンジニアを目指す方法とは

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

有効桁数を指定する場合は、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では、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。