# Python演習1-2 コンピュータにおける数値

コンソールに0.1+0.2と入力してみましょう。

>>> 0.1+0.2
0.3
実際は...
>>> 0.1+0.2
0.30000000000000004

# 浮動小数点

コンピュータの扱える数値の範囲は非常に狭く(64bitの場合)それを解決するために精度を犠牲にしてより大きな数値を扱うために浮動小数点という考え方が用いられます。

なぜ精度が犠牲になるのか

コンピュータの中では中央演算装置(以下CPU)にて一度に扱えるデータ量が決まっており、近代的なコンピュータでは64ビット幅(≒64bit)で管理されているが、そこに収まりきらない計算結果が破棄されるため。

10進数の小数を2進数に変換すると、20桁周期の2進循環小数になります。

つまり、循環小数の計算を途中で打ち切った分が誤差として現れて上のような結果に現れるわけです。

なお、整数の計算には無限桁が使用されるため誤差が発生しませんが実数に変換すると誤差が発生します。

その他の詳しい解説はこちら

浮動小数点って何? (opens new window)

# 文字列と数値

プログラミング言語によっては文字列と数値を厳密に解釈するものがあります。その中の一つがPythonです。

>>> 1
1
>>> "1"
'1'

この例では上が数値、下が文字列です。

数値と文字列を混在して計算しようとするとエラーが発生します。

>>> 1+"1"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

この場合、文字列を数値に変換するとうまく計算できるようになります。

>>> 1+int("1")
2

int()がPythonにおける数値または文字列を整数に変換する関数です。小数点が入っていると、切り捨てられます。

float()は数値または文字列を浮動小数点数として取得します。

str()を使用すると数値を文字列に変換することができます。

>>> "1"+"abc"
'1abc'

では、"1"+"1"(文字列の1同士)を計算したらどうなるでしょうか。

解答
>>> "1"+"1"
'11'

このように、文字列としての計算のため'11'が結果となります。

# 演習 1-2

以下のコードを解答が実数になるように改修せよ。

0.4+"0.8"