Pythonでの数値計算
Pythonでの基本的な数値の計算で、最低限知っておきたいものをご紹介します。
Pythonによる四則演算
四則演算は次の通りです。+ -のような記号のことを、コンピュータの用語で演算子(operator)といいます。
演算の種類 | 演算子(operator) | 例 |
---|---|---|
足し算 | + | 7+3 → 10 |
引き算 | - | 7-3 → 4 |
掛け算 | * | 7*3 →21 |
割り算 | / | 20/3 →6.666666666666667 |
商 | // | 20//3 → 3 |
余り | % | 20%3 → 1 |
以下、具体的なプログラムを作成します。
Pythonによる四則演算
pythonにより和、差、積の計算をします。
- #1 Pytohn での和、差、積の計算
- print(7+3)
- print(7-3)
- print(7*3)
10 4 21
変数に数値を代入してから計算することもできます。print文でフォーマットすると次のようになります。
- # 2 python での和、差、積の計算
- x = 7
- y = 3
- print(f'x + y = {x+y}')
- print(f'x - y = {x-y}')
- print(f'x * y = {x*y}')
- print(f'x + y = {x+y}')
x + y = 10 x - y = 4 x * y = 21
Pythonによる割り算
Pythonでの割り算、商、余りの計算は次の通りになります。
- #3 Pythonでの割り算の計算
- print(20/3)
- print(20//3)
- print(20%3)
6.666666666666667 6 2
- 2行目のように割り切れない場合は、16~17桁を表示し、一番下の桁は四捨五入されます。
- 3行目のように”//”を使うと商が、つまり割り切れない場合は小数点以下が切り捨てられます。
- 4行目のように”%”を使うと、割り切れない場合は余りが表示されます。
変数を使った割り算
変数を使って割り算をしても結果は同じです。
割る数も割られる数も正の場合
割られる数をdividend、割る数をdivisorとすると、割り算はdividend / divisorで計算します。また、余りを考えずに割った結果はresult、余りを考える場合、商はquotient、余りをremainderとします。
- #4 Pythonでの割り算の計算
- dividend = 20
- divisor = 3
- result = dividend / divisor
- print(f'result = dividend / divisor={result}')
- quotient = dividend // divisor
- print(f'quotient = dividend // divisor={quotient}')
- remainder = dividend % divisor
- print(f'remainder = dividend % divisor={remainder}')
- print(f'remainder = dividend-quotient*divisor={dividend-quotient*divisor}')
result = dividend / divisor=6.666666666666667 quotient = dividend // divisor=6 remainder = dividend % divisor=2 remainder = dividend-quotient*divisor=2
- 4行目のように、通常、割り算は”/”を使い、少数点表示となり割り切れないときは、JupyterNotebookでは有効桁数(整数部分と小数部分を合わせて)17桁程度で、最後の桁は四捨五入して表示されます。
- 6行目のように、商(小数点以下を切り捨て)を求めるときは、”//”を使います。
- 8行目のように、商を求めた際の余りは”%”を使います。余りは次の式で計算されます。
- 3の結果を10行目で検証しています。
割られる数がマイナスの場合
切り捨て除算において、割られる数がマイナスの場合の考え方をご紹介います。
- #5 Pythonでの割り算の計算
- dividend = -17 # 割られる数字がマイナス
- divisor = 3
- result = dividend / divisor
- print('割り算:', result)
- quotient = dividend // divisor
- print('商:', quotient)
- remainder = dividend % divisor
- print('余り:', remainder)
- print('検証:', dividend-quotient*divisor)
割り算: -5.666666666666667 商: -6 余り: 1 検証: 1
- 4行目のように、結果は-5.66・・・7となり、5行目で、小数点以下を切り捨てた場合はマイナス方向に切り捨てられて-6になります。
- 割る数が正、割られる数が負の場合、商は負の数になりますが、このときには無限小(0の反対の方向)に切り捨てます。
これらの関係は前の式、$余り(remainder))=割られる数(dividend:)-商(quotient)×割る数(divisor)$と同じです。
小数に関わる計算
Pythonでプログラミングをしていて、最も戸惑うものの一つとして少数の計算があります。多くの場合には問題にはなりませんが、細かいところで誤差が発生したり、十分な桁数まで計算してくれないことがあるためです。
小数の計算での誤差や表示桁数
次の例の場合に問題が生じます。
- #6 小数の計算
- print(10/3)
- print(1.2+1.2+1.2)
- print(1.1+1.1+1.1)
- print(1/81)
3.3333333333333335 3.5999999999999996 3.3000000000000003 0.012345679012345678
- 2行目のように10/3の場合、3.33・・と永遠に3が続きます。ところがpythonでは小数点以下16桁まで表示され、最後の桁はなぜか5と2だけ切り上げられます。
- 3行目のように1.2を3回足すと3.6より少しだけ小さくなります。逆に4行目のように1.1の場合は3.3より少しだけ大きくなります。
- 5行目のように、1/81は何か面白い結果になりそうですが、いいところで終わってしまいます。
小数の表示の問題点の解決法
上記のように小数点以下で誤差が発生しますが、小数点以下16桁くらいのレベルなので通常の計算ではまず問題になりません。表示桁数を限定することできれいに表示されます。逆に表示桁数を増やすこともできます。
- #7 小数点以下の誤差が生じる場合の表示
- print(f'{1.2+1.2+1.2:.1f}')
- print(f'{10/3:.5f}')
- print(f'{10/3:.5f}')
- print(f'{1/81:.100f}')
3.33333 3.6 3.3 0.0123456790123456783270228243054589256644248962402343750000000000000000000000000000000000000000000000
2から5行目のようにフォーマット済み文字列リテラルを使うと問題なく表示されます。また、ある程度まで表示桁数を増やすことができます。
べき乗や平方根
このほか、よく使うのはべき乗や平方根の計算です。
- #8 べき乗と平方根、立方根の計算
- print(2**3)
- print(4**0.5)
- print(27**(1/3))
べき乗は”**”を使います。ExcelやLatexでは”^”を使うので、注意が必要です。また、平方根はもう少しスマートな方法もありますが、ここでは基本的な方法をご紹介します。平方根は0.5乗、3乗根は1/3乗することで計算することができます。
8 2.0 3.0