数値計算の基礎
Pythonによる四則演算
足し算など、pythonを使って四則演算をします。
Pythonによる四則演算
単純な四則演算
Pythonは次の表により和、差、積の計算をします。
演算の種類 | 演算子 | 例 |
---|---|---|
足し算 | + | 1+2 → 3 |
引き算 | - | 10-3 → 7 |
掛け算 | * | 10*55 → 550 |
記号のことを、コンピュータの用語で演算子(operator)といいます。Print関数で計算結果を表示することができます。
和、差、積の計算
- print(7 + 3)
- print(7 - 3)
- print(7 * 3)
10 4 21
3. 掛け算は通常の数学の×とは異なり、excelや多くのプログラミング言語では*(アスタリスク)を使います。
割り算、商の計算
割り算や商の計算は意外と複雑です。
演算の種類 | 演算子: | 例 |
---|---|---|
割り算 | / | 7/3=2.3333333333333335 |
商の計算 | // | 7//3=2 |
余りの計算 | % | 7%3=1 |
割り算、商、余りの計算
- print(7 / 3)
- print(10 / 2)
- print(7 // 3)
- print(7 % 3)
2.3333333333333335 5.0 2 1
1. 7÷3のように割り算をするときには/演算子を使います。割り切れない場合には、2.3333333333333335のように表示され、概ね17桁目のあたりで誤差が出ることがあります。
2. 10÷2のように、答えが整数であっても5.0のように小数点付きで表示されます。いずれにしても計算結果は小数点付きで表示されます。
3. ”//”を使うと割り切れない場合、小数点以下が切り捨てられます。
4. ”%”を使うと割り切れない場合、余りが表示されます。
print関数でフォーマット文字列(f-strings)を使うことにより、割り算の結果を表示する桁数を限定し、見やすくすることができます。
フォーマット文字列(f-strings)による小数点の桁数の表示
- x = 8 / 3
- print(x)
- print(f'{x:.0f}')
- print(f'{x:.2f}')
3 2.67 2.6666666666666665
1. 割り切れない割り算の結果を変数xに代入します。
3.ではxを整数まで、3.では小数点第2位まで表示しています。
また、JupyterNotebookやColaboratoryでは、%precision 3のように数値を指定することで表示する桁数を制限することができます。
precisionによる小数点表示の設定
- %precision 3
- 8/3
2.667
2. フォーマット文字列(f-strings)を使わなくても、すっきりと小数点第3位までの表示となります。
割り算の精度
pythonの割り算では誤差が発生するので、その傾向を見ておく必要があります。1/81という割り算は0.0の後、123456789が無限に繰り返される循環乗数となります。このことから次の計算をしてみます。
割り算の精度を確認
- print(f'{1/81:.60f}')
- print(f'{100/81:.60f}')
- print(f'{10000/81:.60f}')
0.012345679012345678327022824305458925664424896240234375000000 1.234567901234567832702282430545892566442489624023437500000000 123.456790123456784158406662754714488983154296875000000000000000
1. 小数点以下60桁まで表示すると、0.0の後、18桁まで正しく表示され、53桁目以降は0になってしまいます。
2.3.ではこれを10倍、100倍していますが、小数点の位置がずれただけの結果となります。このことから小数点以下の桁数というよりも。はじめに0以外の数字が表れ以降、何桁まで正しく計算されるかが一定なります。このことから、この18桁のような桁数を有効桁数といいます。
商と余りの関係
Pythonにより商を計算するときの、正、負の関係を確認します。
割る数も割られる数も正の場合
割られる数をdividend、割る数をdivisorとすると、割り算はdividend / divisorで計算します。
正の整数÷正の整数
- dividend = 7
- divisor = 3
- result = dividend / divisor
- print('割り算:', result)
- quotient = dividend // divisor
- print('商:',quotient )
- remainder = dividend % divisor
- print('余り:', remainder)
- print('検証:',dividend-quotient*divisor)
割り算: 2.3333333333333335 商: 2 余り: 1 検証: 1
3. 通常、割り算は”/”を使い、少数点表示となり割り切れないときは、JupyterNotebookでは有効桁数(整数部分と小数部分を合わせて)17桁程度で、最後の桁は四捨五入して表示されます。
4. 商(小数点以下を切り捨て)を求めるときは、”//”を使います。
7. 商を求めた際の余りは”%”を使います。余りは次の式で計算されます。
9. 結果的には、次の式のとおりになります。
商に関する計算式
Pythonによる商の計算 負の整数÷正の整数
切り捨て除算において、割られる数がマイナスの場合次のようになります。
負の整数÷正の整数
- dividend = -7
- divisor = 3
- result = dividend / divisor
- print('割り算:', result)
- quotient = dividend // divisor
- print('商:',quotient )
- remainder = dividend % divisor
- print('余り:', remainder)
- print('検証:',dividend-quotient*divisor)
割り算: -2.3333333333333335 商: -3 余り: 2 検証: 2
3. 割り算の結果が-2.33・・・の場合マイナス方向(数直線の左の方向)に丸められます。
7. 余りは上記の算式で計算されます。
割る数がマイナスの場合
正の整数÷負の整数
- dividend = 7
- divisor = -3
- result = dividend / divisor
- print('割り算:', result)
- quotient = dividend // divisor
- print('商:',quotient )
- remainder = dividend % divisor
- print('余り:', remainder)
- print('検証:',dividend-quotient*divisor)
割り算: -2.3333333333333335 商: -3 余り: 2 検証: 2
3. 割り算の結果が-2.33・・・の場合マイナス方向(数直線の左の方向)に丸められます。
7. 余りは同じ算式で計算されます。
負の整数÷負の整数
- dividend = -7
- divisor = -3
- result = dividend / divisor
- print('割り算:', result)
- quotient = dividend // divisor
- print('商:',quotient )
- remainder = dividend % divisor
- print('余り:', remainder)
- print('検証:',dividend-quotient*divisor)
割り算: 2.3333333333333335 商: 2 余り: -1 検証: -1
3. 割り算の結果が2.33・・・の場合、やはりマイナス方向(数直線の左の方向)に丸められます。
7. 7. 余りは同じ算式で計算されます。
上記をまとめると、商が正の数の場合も負の場合も数直線でみると左側、無限小の方に向かって丸めるようになります。
べき乗の計算
べき乗の計算
- print(2**3)
- print(2**0.5)
- print(2**(1/2))
- print(27**(1/3))
8 1.4142135623730951 1.4142135623730951 3.0
1. べき乗は**を使って計算します。Excelなどで使う^とは異なるので注意が必要です。
計算をする順序
いくつかの演算を組み合わせる式の場合、通常の計算式と同じように積、次にご紹介する商が優先して先に計算され、その後に和、差が計算されます。また、和、差を先に計算させたい場合にはカッコ(...)を使って計算します。
変数を使って出力
- print(5*4 + 3*2)
- print(5*4 - 3*2)
- print(5*4**2 + 3*2**3)
- print(5*(4+3)*2)
- print(5*((4-3)*2-1))
26 14 104 70 5
上記の結果、正しく計算されました。