Pythonでの平方根と小数を計算する
Pythonでn乗根を計算する
正の数値のn乗根を計算する
Pythonではべき乗の演算子を使い、平行根、立方根を計算することができます。
- #1 べき乗の演算子を使い平方根、立方根を計算する
- print(16**0.5)
- print(16**0.25)
- print(27**(1/3))
- print(2**0.5)
4.0 2.0 3.0 1.4142135623730951
- 平方根は正の数値の0.5乗と考えられます。そこで2行目のようにすると、平方根(ルート)を計算することができます。計算結果は4.0となり、きれいに割り切れても少数として認識されます。
- 3行目のように、0.25乗をすることにより4乗根を計算することができます。
- 4行目のように、3乗根は3分の1乗することで計算することができます。
- 5行目のように、2の平方根のように小数が続く場合は有効桁数17桁程度で表示されます。
変数を使って平方根を計算する
変数に正の値を代入しても、同じように平方根を計算することができます。
- #2 変数を使って平方根を計算する
- import math
- x=16
- y=0.5
- print(x**0.5)
- print(x**y)
4.0 4.0
mathモジュールの
べき乗の演算子を使えば平方根だけでなく、3乗根、4乗根も計算することができますが、平方根については一目見て何をやっているのかよくわからないという問題があります。そこで、Pythonにはsqrtという平方根を計算する関数が用意されています。
ところで、sqrt関数を使うためにはmathモジュールをあらかじめimportする必要があります。Pythonを起動すると、Pythonを使うことができます。これは、ハードディスクやフラッシュメモリといった補助記憶装置にあるPythonのプログラムがコンピュータの主記憶装置に呼び出されたことになります。イメージとしては、棚(補助記憶装置)に入っているPythonという道具を作業机(主記憶装置)に並べる感じです。このとき、Pythonの全ての機能を呼び出すようにしてしまうと、実際に作業ができるようになるまで時間がかかり、作業机(主記憶装置)もいっぱいになってしまうので作業の効率が良くありません。そこで、Pythonを起動するときに使える機能は最小限なものに絞り、そこそこよく使う機能は必要に応じて呼び出すようにしています。このような、そこそこよく使う機能を標準モジュールといわれており、mathモジュールはその1つです。mathモジュールには数学でよく使う関数などが多く含まれています。
- #3 mathモジュール
- import math
- print(math.sqrt(2))
- print(f'{math.sqrt(2):.60f}')
1.4142135623730951 1.414213562373095145474621858738828450441360473632812500000000
- 2行目のimport文により、mathモジュールを補助記憶装置から見つけ出し、使えるようにします。
- sqrt関数を使い、2の平方根を計算します。計算結果は0.5乗して計算した時と同じように有効桁数17桁程度で表示します。sqrt関数を使うときにはmathモジュールであることを示すために”math.”を頭に付けます。sqrt とは平方根” square root”の略です。
- さらに多くの桁数を表示したいときには、フォーマット済み文字列リテラルを使い、”.60f”のように桁数を指定します。ただしmathモジュールでは有効桁数53桁程度が上限となります。
mathモジュールの関数
mathモジュールにある数学関数の例として次のものがあります。
- #4 mathモジュールの関数の例
- print(math.log10(100))
- print(f'{math.pi:.60f}')
- print(f'{math.e:.60f}')
2.0 3.141592653589793115997963468544185161590576171875000000000000 2.718281828459045090795598298427648842334747314453125000000000
- 2行目のようにlog10関数により、10を底とする対数を計算することができます。
- 3行目のようにpi関数により円周率を求めることができます。有効桁数は最大で49桁程度です。
- 4行目ようにe関数により自然対数を求めることができます。有効桁数は最大で52桁程度です。
math数学関数に
分数の計算
/演算子を使って分数を計算する
pythonでは、分数をprint関数で表示しても少数として計算されます。
- #4 分数の計算
- print(3 / 5)
- print(1 / 3)
- print(3 / 5 + 1 / 3)
0.6 0.3333333333333333 0.9333333333333333
通常は小数に変換して計算するので、分数同士の和を計算しても少数で表示されます。
Fraction関数を使った分数の計算
Fraction関数を使えるようにする
分数を少数に変換せず、分数のまま計算したいことがあります。このときにはfractionsモジュールのFraction関数を使います。fractionは分数を意味します。モジュール名はfractionsと小文字で始まり最後に”s”が付きます。いっぽう関数名のFractionは大文字で始まり最後に”s”が付きません。
- #6 fractionsモジュールのFraction関数で分数の計算をする
- from fractions import Fraction
- print(Fraction(3,5))
- print(Fraction(1,3))
- print(Fraction(3,5)+Fraction(1,3))
3/5 1/3 14/15
- 2行目でFraction関数を使えるようにします。mathモジュールと同じように、import fractions~fractions.Fraction(××)という書き方もできますが、分数の計算にいちいちfractionsを付けるのは大変なので、上記のような書き方をします。Pythonでは関数名などの名前は索引を使って管理します。import fractionsとすると、Python本体とfractionsと2つの索引を使って管理することになります。このため、関数を使って計算するときにはfractionsを付ける必要があります。一方、今回にようにするとFraction関数はPython本体の索引で管理されることになるので、いちいちfractionsを付ける必要がなくなります
- 3行目、4行目のように、Fraction関数に分子と分母を指定することにより分数を定義することができます。
- 5行目のように複数の分数に対し、Fraction関数を使い和を計算すると、結果は通分されます。
分数から分子、分母を取り出す
Fraction関数で3/5という分数を定義し、ここから分子と分母を取り出します。
- #7 分数の分子と分母を取り出す
- print(Fraction(3, 5).numerator)
- print(Fraction(3, 5).denominator)
3 5
- 2行目のようにFraction関数に”. numerator”をつなげることで分子を取り出すことができます。numeratorは英語で分子を示します。また、numeratorのようなものを属性(property)といいます。
- 3行目にように分母はdenominator属性度取り出すことができます。denominatorは分母を意味します。
Fraction関数は既約分数になる
Fraction関数で4/6のように分子と分母に共通の約数をもつような値を指定した場合、約分され既約分数として表示されます。
- #8 分数は既約分数に約分される
- from fractions import Fraction
- x=Fraction(4,6)
- print(x)
- print(x.numerator)
- print(x.denominator)
2/3 2 3
上記のように、分数表示もnumerator、denominatorとも約分されて表示されます。
既約分数にしたくない場合
Fraction関数に分子、分母を渡すときにそのままの状態で活かしたい場合は、,_normalize=Falseとすると、約分しない分数として認識されます。
- #9 分数を既約分数にしない
- y=Fraction(4,6,_normalize=False)
- print(y)
- print(y.numerator)
- print(y.denominator)
4/6 4 6