tb020 | データの格納形式 |
数値データを記憶させる場合、いくつかのタイプ(storage type)が選択できます。その選択によって表現できる数値データの精度が変わってくると共に、メモリ占有量も変化することになります。
generateコマンドのダイアログに見られるように、データの格納形式には複数の種類があります。
今、データの形式を数値データに限ることにすれば、選択肢は次のとおりです。
byte | 1バイト単位のデータ |
int | 2バイトの整数データ |
long | 4バイトの整数データ |
float | 4バイトの単精度浮動小数データ |
double | 8バイトの倍精度浮動小数データ |
generateで変数を生成する場合にはfloatがデフォルトとなります。
今、Data Editorを使って0.1, 0.2, 0.3という3つのデータを含む変数dataを作成してみます。
. list data
この変数data中に0.1というデータがいくつあるかをカウントしてみます。
. count if data == 0.1
0
予想に反して0という結果が返ってきたわけですが、これには事情があります。0.1という数値は2進法で表現した場合、無限小数となるわけですが、データセット上には4バイトの浮動小数形式floatで記録されています。一方、data == 0.1という比較などの内部演算にはすべて8バイトの倍精度浮動小数形式doubleが用いられます。このため丸め誤差の影響により、0.1に合致するデータは存在しないという判断に至ってしまったわけです。
この問題はfloat()という関数を用いることによって解決を図ることができます。
. count if data == float(0.1)
1
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |
© 2018 Math工房