Python - 数値演算
四則演算と累乗
# 加法 print(5 + 3) # 5と3を足して結果を出力 # 減法 print(10 - 7) # 10から7を引いて結果を出力 # 乗法 print(4 * 6) # 4と6を掛けて結果を出力 # 累乗 print(2**3) # 2の3乗を計算して結果を出力 # 除法(実数) print(8 / 2) # 8を2で割って実数の結果を出力 # 除法(整数) print(9 // 2) # 9を2で割って整数部分を出力 # 剰余 print(9 % 2) # 9を2で割った余りを出力
実数のべき表示
"e" という文字を用いて、10 のべき表示ができます。例えば、e4 や e+4 は を意味します。また、e-6 は を意味します。
print(2.0**1000) #1.0715086071862673e+301 num = 1.5e6 print(num) #1500000.0 num = 10e-3 print(num) #0.01
整数の表示
実数の場合は、非常に大きな数はべき表示されますが、整数はコンピュータのメモリに収まる範囲で、いくらでも大きくできます。
print(2.0**10) #1.0715086071862673e+301 print(2**1000) #10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
デフォルトでは、4300行まで表示できるようですが、それを超えると次のようなエラーが表示されます。
Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
例えば、次のようなべき乗のべき乗の計算をすると、4300 桁を超えてこのエラーが表示されます。
print(2**2**2**2**2) #2^(2^16)=2^65536, これは19729桁
整数と実数の変換
実数を整数に変換するには int 関数を、整数を実数にするには float 関数を用います。また、整数と実数の演算をしても実数として、結果が算出されます。
# 実数から整数への変換 int(5.8) #5 int(-3.2) #-3 # 整数から実数への変換 float(4) #4.0 4+0.0 #4.0
注意点は、負の数を整数に変換する場合、ガウス記号のように整数部分を返すのではなく、0 の方向に切り下げてた結果を返すということです。
数値誤差
整数を実数に変換したときには、浮動小数点数の影響で誤差が生じます。例えば、次のような場合があります。
# 0.1 と 0.2 を足して 0.3 と比較する例 x = 0.1 y = 0.2 print(x) print(y) result = x + y #0.30000000000000004 print(result) print(result == 0.3) # False が出力される
0.1 + 0.2 がなぜ、0.30000000000000004 になるのかという話ですが、実数の数値は内部では 2 進数で処理されています。0.1, 0.2 はどちらも有限の 2 進数では表すことができません。そのため、近似値で扱っています。そのため、0.1 と 0.2 は実際は正確には、0.1、0.2 ではなく足し算をしたときにその誤差が生じてしまったということです。
計算の順序
python では、通常の計算と同じく、括弧、積商、和差の順で計算が優先されます。
result = (3 + 2) * 4 / 2 - 1 print(result) #9.0
上の例の場合、3 + 2 = 5 → 5 * 4 = 20 → 20 / 2 = 10.0 → 10.0 - 1 = 9.0 の順で処理されます。なお、除算の段階で、整数から実数に変換されます。
print(5 * 2 / 3 * 4) #13.333333333333334
括弧がない場合は、積商、和差の順で処理されます。優先順位が同じものは左から順に処理されます。上の例の場合 5 * 2 = 10 → 10 / 3 = 3.33... → 3.33... * 4 = 13.33... となります。
数学関数
基本的な実数に関する数学の関数がまとめられたライブラリとして、math ライブラリがあります。
ルートや初等関数、 や などの特殊な値、天井関数や順列、組み合わせを求める関数などが含まれます。
math ライブラリは次のようにインポートして使用します。
import math
(使用例)
import math # math.sqrt(x) の例 result_sqrt = math.sqrt(25) print(result_sqrt) # 出力: 5.0 # math.sin(x) の例 angle_rad = math.radians(30) # 30度をラジアンに変換 result_sin = math.sin(angle_rad) print(result_sin) # 出力: 0.49999999999999994 (約0.5) # math.log(x, [base]) の例 result_log = math.log(10) print(result_log) # 出力: 2.302585092994046 result_log_base_2 = math.log(8, 2) # 底が2の対数を計算 print(result_log_base_2) # 出力: 3.0
なお、実数ではなく複素数に関する関数がまとめられたライブラリとして cmath ライブラリがあります。