KNIMEST’s diary

KNIME使いがPythonも使いたくて勉強中

【Python学習帳】007_データ型

初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf

hdl.handle.net

CC-BY-NC-NDライセンスに従って引用します。

本教材での到達目標:

Python によるプログラムの実行についての基本操作ができるようになる.
Python プログラムを構成する基本的要素の機能と書式について説明し,例題を用いて実行例を構成できるようになる.
Python を用いて簡単なプログラムを自ら設計,実装,テストできるようになる.

第3章、「変数と演算,代入」の勉強中です。

knimest.hatenablog.com

今回は基本的なデータ型、特にFloat(浮動小数点数)について勉強します。

http://hdl.handle.net/2433/265459 「プログラミング演習 Python 2021」 Version2021_10_08_01.pdf

上表の注釈にあった

1 論理演算の代数としての理論を考案した George Boole にちなみます

は初めて知りました。定数は先頭が大文字というのも今後押さえておきたいところです。

 

単に小数とは呼ばれないで浮動小数点数と日本語表記されるFloat型については、別資料のコラムに記載があるそうですので読んでみました。

http://hdl.handle.net/2433/265459
「Version2021_10_08_02.pdf」

科学技術計算では(絶対値の非常に小さい数,例えばプランク乗 数(約 6.62× 10−34 J s )や非常に大きな数,例えばアボガドロ数(約 6.02× 1023 mol−1 )が用いられます.このような数値を表すには固定小数点数は辛く,表記例のように,「整数部を1桁として表記した数(仮数)」と「10(基数)のべき乗 (指数)」の積として表すことが効果的です.このような表現をコンピュータ内でも用いていて浮動小数点数と呼んでいます.すなわち,実際の小数点の位置がふわふわ揺れ動く数値という意味です.

Python では倍精度の浮動小数点数が一般に用いられていますが,文字列からの

変換の関数は float と命名されています.

単精度では4バイトですが、8バイトを用いる倍精度浮動小数点数(double

precision floating point number)を使うと言うことでした。深追いは避けます。

 

1.2 2進数で浮動小数点数を扱うことの嫌な点

から抜粋しますが、

10 進数の小数では 1/3 は 0.33333… となり有限の桁数では表せません,これは

十進数の小数が各桁の大きさ 1/10, 1/100, 1/1000 … のそれぞれ 0 ~9 倍の和として表そうとするためです.

2 進数の小数では 1/2, 1/4, 1/8, 1/16 …が各桁の大きさとなり,その 0 倍か 1 倍の和で数値を表します.このため,10 進数を使う我々がしばしば用いる 0.1 が2

進数では正確に表せません.

実際,Python で 0.1 を 3 回加えたものが 0.3 と等しいかどうかを評価する以下

の式について試してみると

0.1 + 0.1 + 0.1 == 0.3

その値は False となってしまいます.

確かめると確かにそうなので、いったいいくつと算出されるのか試してみました。

なるほど割り切れない気持ちになりました。
この件もっと掘り下げて下さっている記事があったので紹介しておきます。

ictsr4.com

一方で、

科学や技術の計算では,十分な精度さえあればよい場合がほとんどで 0.1 が厳密

な値をとっていることはあまり問題になりません

科学や技術で扱うのは実際の物理的な存在なので,実現可能な精度が十分に表せればいいのです.

とのコメントも、普段実測値の誤差に常々悩む研究分野の人間としてはひとまず納得です。

続いて

3.7 Python の変数のより正しい理解

では本来はより正しい理解のために重要だが

実際には Python では変数が直接,データ(オブジェクト)を持っているのではな く,「オブジェクトがどこにあるか」という所在の情報(参照)を持っています.

ことを知り、ひとまずは変数がもつデータの所在を特定する情報を知る方法として関数id()の使い方を学びました。

 

以下の課題と合わせて実行して今回の勉強を終わりにします。

演習 3-4 データの型の確認

Python シェルで以下を実行してください.

a = 1

b = 1/2

c = “ABC”

print(a)

print(b)

print(c)

print(type(a))

print(type(b))

print(type(c))

Pythonでは特殊な設定をしない限りは小数は倍精度つまりdoubleですが、データ型としてはfloatと表現されていますね。

私の普段の用途ではこういった知識を知らなくてもほとんど問題が生じなかったのですが、基礎知識として知ることができてよかったです。

次回はプログラミング例題で演算処理を体験します。

knimest.hatenablog.com