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. #1 Pytohn での和、差、積の計算
  2. print(7+3)
  3. print(7-3)
  4. print(7*3)

10
4
21

変数に数値を代入してから計算することもできます。print文でフォーマットすると次のようになります。

  1. # 2 python での和、差、積の計算
  2. x = 7
  3. y = 3
  4. print(f'x + y = {x+y}')
  5. print(f'x - y = {x-y}')
  6. print(f'x * y = {x*y}')
  7. print(f'x + y = {x+y}')

x + y = 10
x - y = 4
x * y = 21

Pythonによる割り算

Pythonでの割り算、商、余りの計算は次の通りになります。

  1. #3 Pythonでの割り算の計算
  2. print(20/3)
  3. print(20//3)
  4. print(20%3)

6.666666666666667
6
2

  1. 2行目のように割り切れない場合は、16~17桁を表示し、一番下の桁は四捨五入されます。
  2. 3行目のように”//”を使うと商が、つまり割り切れない場合は小数点以下が切り捨てられます。
  3. 4行目のように”%”を使うと、割り切れない場合は余りが表示されます。

変数を使った割り算

変数を使って割り算をしても結果は同じです。

割る数も割られる数も正の場合

割られる数をdividend、割る数をdivisorとすると、割り算はdividend / divisorで計算します。また、余りを考えずに割った結果はresult、余りを考える場合、商はquotient、余りをremainderとします。

  1. #4 Pythonでの割り算の計算
  2. dividend = 20
  3. divisor = 3
  4. result = dividend / divisor
  5. print(f'result = dividend / divisor={result}')
  6. quotient = dividend // divisor
  7. print(f'quotient = dividend // divisor={quotient}')
  8. remainder = dividend % divisor
  9. print(f'remainder = dividend % divisor={remainder}')
  10. 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

  1. 4行目のように、通常、割り算は”/”を使い、少数点表示となり割り切れないときは、JupyterNotebookでは有効桁数(整数部分と小数部分を合わせて)17桁程度で、最後の桁は四捨五入して表示されます。
  2. 6行目のように、商(小数点以下を切り捨て)を求めるときは、”//”を使います。
  3. 8行目のように、商を求めた際の余りは”%”を使います。余りは次の式で計算されます。
  4. 3の結果を10行目で検証しています。

$余り(remainder))=割られる数(dividend:)-商(quotient)×割る数(divisor)$

割られる数がマイナスの場合

切り捨て除算において、割られる数がマイナスの場合の考え方をご紹介います。

  1. #5 Pythonでの割り算の計算
  2. dividend = -17 # 割られる数字がマイナス
  3. divisor = 3
  4. result = dividend / divisor
  5. print('割り算:', result)
  6. quotient = dividend // divisor
  7. print('商:', quotient)
  8. remainder = dividend % divisor
  9. print('余り:', remainder)
  10. print('検証:', dividend-quotient*divisor)

割り算: -5.666666666666667
商: -6
余り: 1
検証: 1

  1. 4行目のように、結果は-5.66・・・7となり、5行目で、小数点以下を切り捨てた場合はマイナス方向に切り捨てられて-6になります。
  2. 割る数が正、割られる数が負の場合、商は負の数になりますが、このときには無限小(0の反対の方向)に切り捨てます。

これらの関係は前の式、$余り(remainder))=割られる数(dividend:)-商(quotient)×割る数(divisor)$と同じです。

小数に関わる計算

Pythonでプログラミングをしていて、最も戸惑うものの一つとして少数の計算があります。多くの場合には問題にはなりませんが、細かいところで誤差が発生したり、十分な桁数まで計算してくれないことがあるためです。

小数の計算での誤差や表示桁数

次の例の場合に問題が生じます。

  1. #6 小数の計算
  2. print(10/3)
  3. print(1.2+1.2+1.2)
  4. print(1.1+1.1+1.1)
  5. print(1/81)

3.3333333333333335
3.5999999999999996
3.3000000000000003
0.012345679012345678

  1. 2行目のように10/3の場合、3.33・・と永遠に3が続きます。ところがpythonでは小数点以下16桁まで表示され、最後の桁はなぜか5と2だけ切り上げられます。
  2. 3行目のように1.2を3回足すと3.6より少しだけ小さくなります。逆に4行目のように1.1の場合は3.3より少しだけ大きくなります。
  3. 5行目のように、1/81は何か面白い結果になりそうですが、いいところで終わってしまいます。

小数の表示の問題点の解決法

上記のように小数点以下で誤差が発生しますが、小数点以下16桁くらいのレベルなので通常の計算ではまず問題になりません。表示桁数を限定することできれいに表示されます。逆に表示桁数を増やすこともできます。

  1. #7 小数点以下の誤差が生じる場合の表示
  2. print(f'{1.2+1.2+1.2:.1f}')
  3. print(f'{10/3:.5f}')
  4. print(f'{10/3:.5f}')
  5. print(f'{1/81:.100f}')

3.33333
3.6
3.3
0.0123456790123456783270228243054589256644248962402343750000000000000000000000000000000000000000000000

2から5行目のようにフォーマット済み文字列リテラルを使うと問題なく表示されます。また、ある程度まで表示桁数を増やすことができます。

べき乗や平方根

このほか、よく使うのはべき乗や平方根の計算です。

  1. #8 べき乗と平方根、立方根の計算
  2. print(2**3)
  3. print(4**0.5)
  4. print(27**(1/3))

べき乗は”**”を使います。ExcelやLatexでは”^”を使うので、注意が必要です。また、平方根はもう少しスマートな方法もありますが、ここでは基本的な方法をご紹介します。平方根は0.5乗、3乗根は1/3乗することで計算することができます。

8
2.0
3.0